chore(plan): marca Phase D (Tasks 13-16) completada

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Juan
2026-05-10 10:51:31 +02:00
co-authored by Claude Opus 4.7
parent db68164354
commit 006d781df0
+14 -14
View File
@@ -1872,7 +1872,7 @@ git commit -m "feat(registry): añade factories para registry y policy_store"
**Files:** **Files:**
- Create: `core/src/agentforge_core/guardrails/base.py` - Create: `core/src/agentforge_core/guardrails/base.py`
- [ ] **Step 1: Implementar** - [x] **Step 1: Implementar**
```python ```python
"""Interfaz Protocol del motor de guardrails.""" """Interfaz Protocol del motor de guardrails."""
@@ -1905,7 +1905,7 @@ class GuardrailEngine(Protocol):
) -> list[GuardrailViolation]: ... ) -> list[GuardrailViolation]: ...
``` ```
- [ ] **Step 2: Commit** - [x] **Step 2: Commit**
```bash ```bash
git add core/src/agentforge_core/guardrails/base.py git add core/src/agentforge_core/guardrails/base.py
@@ -1923,7 +1923,7 @@ git commit -m "feat(guardrails): añade Protocol GuardrailEngine"
Este es el engine más sustantivo. En lugar de depender de `guardrails.hub` (frágil para tests offline), implementamos validadores nativos que hacen lo mismo que los del hub. Presidio sí se usa para PII (es estándar industria y maneja `ES_NIF`). Este es el engine más sustantivo. En lugar de depender de `guardrails.hub` (frágil para tests offline), implementamos validadores nativos que hacen lo mismo que los del hub. Presidio sí se usa para PII (es estándar industria y maneja `ES_NIF`).
- [ ] **Step 1: Test** - [x] **Step 1: Test**
```python ```python
"""Tests del GuardrailsAIEngine.""" """Tests del GuardrailsAIEngine."""
@@ -2030,7 +2030,7 @@ async def test_schema_match_pasa_con_campo(
assert not [v for v in violations if v.blocked] assert not [v for v in violations if v.blocked]
``` ```
- [ ] **Step 2: Implementar `validators.py`** - [x] **Step 2: Implementar `validators.py`**
```python ```python
"""Validadores individuales. Cada uno devuelve list[GuardrailViolation].""" """Validadores individuales. Cada uno devuelve list[GuardrailViolation]."""
@@ -2309,7 +2309,7 @@ def telco_safety_rules(
] ]
``` ```
- [ ] **Step 3: Implementar `guardrails_ai.py`** - [x] **Step 3: Implementar `guardrails_ai.py`**
```python ```python
"""Engine que orquesta los validadores definidos en una PolicyDefinition.""" """Engine que orquesta los validadores definidos en una PolicyDefinition."""
@@ -2418,7 +2418,7 @@ class GuardrailsAIEngine:
return violations return violations
``` ```
- [ ] **Step 4: Verificar y commit** - [x] **Step 4: Verificar y commit**
```bash ```bash
pytest tests/unit/test_guardrails_ai.py -v pytest tests/unit/test_guardrails_ai.py -v
@@ -2436,7 +2436,7 @@ git commit -m "feat(guardrails): añade GuardrailsAIEngine + 8 validadores (PII,
- Create: `core/src/agentforge_core/guardrails/factory.py` - Create: `core/src/agentforge_core/guardrails/factory.py`
- Create: `tests/unit/test_guardrails_composite.py` - Create: `tests/unit/test_guardrails_composite.py`
- [ ] **Step 1: Implementar stub `nemo.py`** - [x] **Step 1: Implementar stub `nemo.py`**
```python ```python
"""Stub de NeMo Guardrails. Solo se carga si GUARDRAILS_NEMO_ENABLED=true. """Stub de NeMo Guardrails. Solo se carga si GUARDRAILS_NEMO_ENABLED=true.
@@ -2498,7 +2498,7 @@ class NeMoGuardrailsEngine:
return [] return []
``` ```
- [ ] **Step 2: Implementar `composite.py`** - [x] **Step 2: Implementar `composite.py`**
```python ```python
"""Engine que ejecuta varios sub-engines en paralelo y agrega resultados.""" """Engine que ejecuta varios sub-engines en paralelo y agrega resultados."""
@@ -2537,7 +2537,7 @@ class CompositeGuardrailEngine:
return [v for sub in results for v in sub] return [v for sub in results for v in sub]
``` ```
- [ ] **Step 3: Implementar `factory.py`** - [x] **Step 3: Implementar `factory.py`**
```python ```python
"""Factory que ensambla el GuardrailEngine según settings.""" """Factory que ensambla el GuardrailEngine según settings."""
@@ -2573,7 +2573,7 @@ def build_guardrail_engine(settings: Settings) -> GuardrailEngine:
return CompositeGuardrailEngine(engines) return CompositeGuardrailEngine(engines)
``` ```
- [ ] **Step 4: Test del composite** - [x] **Step 4: Test del composite**
```python ```python
"""Tests del CompositeGuardrailEngine.""" """Tests del CompositeGuardrailEngine."""
@@ -2622,7 +2622,7 @@ def test_composite_rechaza_lista_vacia() -> None:
CompositeGuardrailEngine([]) CompositeGuardrailEngine([])
``` ```
- [ ] **Step 5: Verificar y commit** - [x] **Step 5: Verificar y commit**
```bash ```bash
pytest tests/unit/test_guardrails_composite.py -v pytest tests/unit/test_guardrails_composite.py -v
@@ -2638,7 +2638,7 @@ git commit -m "feat(guardrails): añade NeMo stub, CompositeEngine paralelo y fa
- Create: `policies/default/index.yaml` - Create: `policies/default/index.yaml`
- Create: `policies/default/versions/v1.yaml` - Create: `policies/default/versions/v1.yaml`
- [ ] **Step 1: Escribir `policies/default/versions/v1.yaml`** - [x] **Step 1: Escribir `policies/default/versions/v1.yaml`**
```yaml ```yaml
name: default name: default
@@ -2704,7 +2704,7 @@ output_validators:
on_validator_error: fail_closed on_validator_error: fail_closed
``` ```
- [ ] **Step 2: Escribir `policies/default/index.yaml`** - [x] **Step 2: Escribir `policies/default/index.yaml`**
```yaml ```yaml
name: default name: default
@@ -2717,7 +2717,7 @@ versions:
active_version: v1 active_version: v1
``` ```
- [ ] **Step 3: Commit** - [x] **Step 3: Commit**
```bash ```bash
git add policies/ git add policies/