Referencia de Arquitectura de Validación de Comparadores
Resumen
Decision Gate impone la corrección del comparador en tres capas:
- Typed import-time synthesis for OpenAPI typed providers derives
allowed_comparatorsfrom normalized result schemas using the strict type-class matrix and canonical comparator ordering. F:crates/decision-gate-typed/src/openapi/check_synthesis.rs L34-L109 F:crates/decision-gate-typed/src/openapi/comparator_derivation.rs L52-L134 - Authoring-time strict validation (default-on) in the MCP layer rejects invalid comparator/type combinations before a scenario or precheck runs. F:crates/decision-gate-mcp/src/validation.rs L36-L673 F:crates/decision-gate-mcp/src/tools/router.rs L3173-L3241 F:crates/decision-gate-mcp/src/tools/router.rs L3808-L3887
- Runtime comparator evaluation in the core returns tri-state results and
yields
Unknownwhen evidence types do not match expectations. 2) La evaluación del comparador en tiempo de ejecución en el núcleo devuelve resultados de tres estados y produceDesconocidocuando los tipos de evidencia no coinciden con las expectativas. F:crates/decision-gate-core/src/runtime/comparator.rs L39-L259
El validador estricto es el guardián; la lógica de tiempo de ejecución es la última línea de comportamiento de fallo cerrado. F:crates/decision-gate-mcp/src/validation.rs L36-L170 F:crates/decision-gate-core/src/runtime/comparator.rs L39-L197
Mapa de Fuente de Verdad
| Área | Archivo | Notas |
|---|---|---|
| Comparator enum + EvidenceQuery | F:crates/decision-gate-core/src/core/evidence.rs L32-L90 | Lista canónica de comparadores y forma de consulta. |
| Sintetización de comparadores OpenAPI tipados | F:crates/decision-gate-typed/src/openapi/check_synthesis.rs L34-L109 F:crates/decision-gate-typed/src/openapi/comparator_derivation.rs L52-L134 | Deriva listas permitidas de comparadores de verificación a partir de esquemas de resultados normalizados. |
| Semántica de comparadores en tiempo de ejecución | F:crates/decision-gate-core/src/runtime/comparator.rs L39-L308 | Ordenamiento consciente de decimales, comportamiento léxico/profundo, desconocido en caso de discrepancia. |
| Motor de validación estricto | F:crates/decision-gate-mcp/src/validation.rs L36-L673 | Matriz de clases de tipo, análisis de esquemas, sobrescrituras de dominio. |
| Integración de herramientas MCP | F:crates/decision-gate-mcp/src/tools/router.rs L3173-L3241 F:crates/decision-gate-mcp/src/tools/router.rs L3808-L3887 | scenario_define + precheck invocan validación estricta. |
| Superficie de configuración de validación | F:crates/decision-gate-config/src/config.rs L1469-L1521 | Interruptores de ValidationConfig e identificadores de perfil. |
| Esquemas de contrato | F:crates/decision-gate-contract/src/schemas.rs L1105-L1129 | Esquema de comparador y anotaciones. |
| Tooltips/docs | F:crates/decision-gate-contract/src/tooltips.rs L260-L296 | Comportamiento de comparador y validación orientado al público. |
| Documentos generados | F:Docs/generated/decision-gate/tooling.md L1-L42 F:Docs/generated/decision-gate/tooltips.json L1-L80 | Regenerados después de actualizaciones de esquema/tooltips. |
| Pruebas de validación MCP | F:crates/decision-gate-mcp/tests/validation.rs L1-L220 | Cobertura de unidad para modo estricto. |
| Pruebas del sistema | F:system-tests/tests/suites/validation.rs L1-L220 | Comportamiento de validación de extremo a extremo. |
Validación de la tubería (MCP)
Definición de escenario (scenario_define)
- MCP validates provider contracts and check schemas. F:crates/decision-gate-mcp/src/tools/router.rs L3216-L3220
- Strict validation enforces comparator/type compatibility and expected-value shape. F:crates/decision-gate-mcp/src/tools/router.rs L3216-L3220
- Implementation:
ToolRouter::define_scenario. F:crates/decision-gate-mcp/src/tools/router.rs L3173-L3241
Precheck (precheck tool)
- MCP validates payload against the registered data shape schema. F:crates/decision-gate-mcp/src/tools/router.rs L3848-L3858
- Strict validation enforces condition compatibility against the data shape schema. F:crates/decision-gate-mcp/src/tools/router.rs L3868-L3870
- Implementation:
ToolRouter::precheck. F:crates/decision-gate-mcp/src/tools/router.rs L3808-L3887
Reglas de Validación Estrictas (Resumen de Implementación)
Compatibilidad de clases de tipo
- Implemented in
crates/decision-gate-mcp/src/validation.rs. Implementado encrates/decision-gate-mcp/src/validation.rs. F:crates/decision-gate-mcp/src/validation.rs L234-L535 schema_type_classesand helpers derive type classes.schema_type_classesy los ayudantes derivan clases de tipo. F:crates/decision-gate-mcp/src/validation.rs L400-L535comparator_allowancesdefines allowed/opt-in/forbidden combinations.comparator_allowancesdefine combinaciones permitidas/opcional/forbidden. F:crates/decision-gate-mcp/src/validation.rs L234-L398validate_expected_valueensures expected-value shapes match schema.validate_expected_valueasegura que las formas de valor esperado coincidan con el esquema. F:crates/decision-gate-mcp/src/validation.rs L587-L673
Familias de comparadores opcionales
- Lexicographic ordering comparators are opt-in (config flag + schema override). F:crates/decision-gate-mcp/src/validation.rs L329-L340 F:crates/decision-gate-mcp/src/validation.rs L558-L585 F:crates/decision-gate-mcp/src/validation.rs L829-L838 F:crates/decision-gate-config/src/config.rs L1472-L1487
- Deep equality comparators are opt-in (config flag + schema override). F:crates/decision-gate-mcp/src/validation.rs L350-L365 F:crates/decision-gate-mcp/src/validation.rs L558-L585 F:crates/decision-gate-mcp/src/validation.rs L829-L838 F:crates/decision-gate-config/src/config.rs L1472-L1487
Sobrescrituras de dominio
x-decision-gate.allowed_comparatorsrestricts allowed comparators to a subset of the type-class matrix.x-decision-gate.allowed_comparatorsrestringe los comparadores permitidos a un subconjunto de la matriz de tipo-clase. F:crates/decision-gate-mcp/src/validation.rs L537-L585x-decision-gate.dynamic_type = truetreats the schema as dynamic (no declared type) and allows comparator validation to proceed without a type restriction, subject to config toggles.x-decision-gate.dynamic_type = truetrata el esquema como dinámico (sin tipo declarado) y permite que la validación del comparador continúe sin una restricción de tipo, sujeto a los interruptores de configuración. F:crates/decision-gate-mcp/src/validation.rs L400-L414
Manejo de uniones
oneOf/anyOf/multi-type unions intersect allowances across variants. F:crates/decision-gate-mcp/src/validation.rs L234-L270 F:crates/decision-gate-mcp/src/validation.rs L675-L701- Nullable unions allow null without expanding comparator set. Las uniones anulables permiten null sin expandir el conjunto de comparadores. F:crates/decision-gate-mcp/src/validation.rs L703-L755
Semántica del Comparador en Tiempo de Ejecución (Núcleo)
- Numeric comparisons are decimal-aware (no float rounding). Las comparaciones numéricas son conscientes de los decimales (sin redondeo de flotantes). F:crates/decision-gate-core/src/runtime/comparator.rs L148-L277
- RFC 3339
date/date-timeordering is supported for string values. Se admite el ordenamiento dedate/date-timesegún RFC 3339 para valores de cadena. F:crates/decision-gate-core/src/runtime/comparator.rs L168-L295 - Unsupported comparisons yield
TriState::Unknown. Las comparaciones no soportadas producenTriState::Unknown. F:crates/decision-gate-core/src/runtime/comparator.rs L65-L198 in_setonly applies to scalar evidence values; arrays/objects yieldUnknown.in_setsolo se aplica a valores de evidencia escalar; los arreglos/objetos generanUnknown. F:crates/decision-gate-core/src/runtime/comparator.rs L250-L258- Implementation:
crates/decision-gate-core/src/runtime/comparator.rs. Implementación:crates/decision-gate-core/src/runtime/comparator.rs. F:crates/decision-gate-core/src/runtime/comparator.rs L39-L308
Superficie de Configuración
- Strict validation is default-on. Disabling strict requires
validation.allow_permissive = true. La validación estricta está activada por defecto. Desactivar la validación estricta requierevalidation.allow_permissive = true. F:crates/decision-gate-config/src/config.rs L1472-L1511 - Optional comparator families are gated by config toggles. Las familias de comparadores opcionales están controladas por interruptores de configuración. F:crates/decision-gate-config/src/config.rs L1472-L1487
- Implementation:
crates/decision-gate-config/src/config.rs(ValidationConfig). Implementación:crates/decision-gate-config/src/config.rs(ValidationConfig). F:crates/decision-gate-config/src/config.rs L1469-L1521
Alineación de Contratos + Documentos
- Comparator schema and annotations are in
crates/decision-gate-contract/src/schemas.rs. El esquema del comparador y las anotaciones están encrates/decision-gate-contract/src/schemas.rs. F:crates/decision-gate-contract/src/schemas.rs L1105-L1129 - Public tooltips and guidance are in
crates/decision-gate-contract/src/tooltips.rs. Las herramientas y guías públicas están encrates/decision-gate-contract/src/tooltips.rs. F:crates/decision-gate-contract/src/tooltips.rs L260-L296 - Regenerate contract artifacts after any validation or comparator changes:
Docs/generated/decision-gate/. F:Docs/generated/decision-gate/tooling.md L1-L42 F:Docs/generated/decision-gate/tooltips.json L1-L80
Lista de Verificación de Cambios
- Update comparator semantics in
crates/decision-gate-core/src/runtime/comparator.rs.- Actualizar la semántica del comparador en
crates/decision-gate-core/src/runtime/comparator.rs. F:crates/decision-gate-core/src/runtime/comparator.rs L39-L308
- Actualizar la semántica del comparador en
- Update strict validation logic in
crates/decision-gate-mcp/src/validation.rs. 2) Actualizar la lógica de validación estricta encrates/decision-gate-mcp/src/validation.rs. F:crates/decision-gate-mcp/src/validation.rs L36-L673 - Update config toggles in
crates/decision-gate-config/src/config.rsif needed. 3) Actualizar los toggles de configuración encrates/decision-gate-config/src/config.rssi es necesario. F:crates/decision-gate-config/src/config.rs L1469-L1521 - Align schemas/tooltips in
crates/decision-gate-contract/src/schemas.rsandcrates/decision-gate-contract/src/tooltips.rs. F:crates/decision-gate-contract/src/schemas.rs L1105-L1129 F:crates/decision-gate-contract/src/tooltips.rs L260-L296 - Regenerate
Docs/generated/decision-gate/artifacts. 5) Regenerar los artefactos enDocs/generated/decision-gate/. F:Docs/generated/decision-gate/tooling.md L1-L42 - Update unit + system tests. F:crates/decision-gate-mcp/tests/validation.rs L1-L220 F:system-tests/tests/suites/validation.rs L1-L220