Parameter required status is lost after wire round-trip

Abierto Apto para principiantes
#3,854 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

@its-amann ya está trabajando en esto.

Desde el 3/11/2026.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
json, python
Área
backend

Línea de trabajo

Empieza por el modelo Parameter en pyrit/models/parameter.py y por la función _reconstruct_param_type_from_wire, que lo reconstruye a partir de JSON. Ejecuta el fragmento de reproducción del issue para confirmar que required es True antes del round-trip y False después. Restaurar REQUIRED_VALUE cuando el indicador required del wire sea verdadero debería hacer que el valor por defecto restaurado coincida con el original. tests/unit/models/test_parameter.py debería cubrirlo.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Bug: triage help wanted
Describe the bug

Parameter serializes its computed required flag, but _reconstruct_param_type_from_wire does not use it to restore REQUIRED_VALUE. A required declaration therefore deserializes as optional (default=None, required=False). Clients that round-trip a registry catalog can stop marking or validating the field as required, although backend construction still rejects a missing input.

Steps/Code to Reproduce
from pyrit.common import REQUIRED_VALUE
from pyrit.models.parameter import Parameter

original = Parameter(name="count", description="Required count", param_type=int, default=REQUIRED_VALUE)
restored = Parameter.model_validate_json(original.model_dump_json())
print(original.required, restored.required, restored.default)
Expected Results

The restored declaration remains required and has the same missing-input validation semantics as the original.

Actual Results

The wire JSON contains "required":true, but the restored model reports True False None for original required, restored required, and restored default.

Screenshots

N/A. This is a deterministic model serialization reproduction.

Versions

Python 3.12.3; PyRIT checkout revision 01ce6ca66a315770b36c7dca1f320668c0d92d7c. tests/unit/models/test_parameter.py (228 tests) and registry resolution tests (93 tests) passed; no backend HTTP workflow was run.

Lenguaje dominante
Python
Estrellas
4.7k
Forks
1k
Merge medio
2 d 3 h
PR fusionados (30 d)
450

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

  • Sin Dockerfile ni archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/PyRIT

Todos los issues de microsoft/PyRIT

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.