Fase 77
fidelity-principles
Criterios de fidelidad al canon publicado, versionados en YAML
Codifica como YAML los principios doctrinales que antes vivían dispersos por código (regla del cánon, no-suplantación, humildad epistémica, citas obligatorias, respeto a la conciencia). Cada principio tiene id, severidad (hard/soft), applies_to por agente, source con cita a publicación oficial, y un tier regex opcional para detección barata. El judge de jw-finetune y el decorator fidelity_wrap de jw-agents lo consultan en runtime. Lazy import desde jw-agents para evitar el ciclo (jw-eval ya depende de jw-agents).
Qué se entregó
- 5 principios builtin: PF001-canon-only, PF002-cite-before-paraphrase, PF003-citation-required, PF010-no-impersonation, PF012-respect-conscience.
- Loader Pydantic con override por id: un YAML del usuario reemplaza al builtin con el mismo id.
- violations_for(text, principles) ejecuta forbidden_phrases + forbidden_regex en una pasada (case-insensitive).
- Judge.score_qa_pair() acepta principles=; un hard hit añade RejectionCode.principle_hard_violation.
- fidelity_wrap(principles=…) filtra por agent_name, sella metadata principle_hard/soft, respeta on_fail warn/reject/annotate.
- Lazy import de jw_eval.principles desde jw_agents para evitar ciclo de dependencias.
- Severidad hard = bloqueo; soft = anotación; sin políticas escondidas.