# Resultados reales de los pasos

> El resultado real de un paso de una ejecución de pruebas — texto enriquecido con imágenes insertadas, escrito y leído con los endpoints de paso de caso de ejecución.

Durante una ejecución de pruebas, un miembro registra un **resultado real** por cada paso. Es texto enriquecido: envíalo como Markdown en `actualResult`, o como documento en `actualResultDocument` (ver [Campos de texto enriquecido](https://docs.probara.net/es/developers/api-reference/#campos-de-texto-enriquecido)). El texto admite como máximo 20000 caracteres. Las capturas y otras imágenes van insertadas en el texto: prepara cada una con `POST /api/v1/images:stage` y referencíala como `![alt](attachment:<ULID>)`.

Los archivos que no son imágenes del texto, como registros, trazas y videos, son [adjuntos de resultado](https://docs.probara.net/es/developers/api/result-attachments/). Un archivo de resultado puede asociarse a un paso con `stepIndex`.

Las escrituras necesitan el permiso `attachments.execute`, que tienen los miembros, los administradores y los propietarios. Los visualizadores reciben `403 forbidden`. Las lecturas siempre están permitidas. Las escrituras siguen las reglas de estado de la ejecución de [Configuración de ejecución](https://docs.probara.net/es/developers/api/project-run-settings/): una ejecución `open` las acepta, una ejecución `closed` las acepta cuando `allowResultsInClosedRuns` resuelve a `true` (el valor por defecto del código), y una ejecución `aborted` siempre las rechaza con `409`.

## Escribir el resultado de un paso

`PATCH /api/v1/runs/{runUlid}/cases/{runCaseUlid}/steps/{stepUlid}/result`

```json
{
  "actualResult": "Se vio HTTP 500 en lugar del dashboard:\n\n![Página de error](attachment:01J...IMG)"
}
```

Envía `actualResult` (Markdown) o `actualResultDocument` (el documento), nunca ambos. `null` borra el resultado. Si no envías ninguno, el resultado guardado no cambia.

**Errores:**

- `422 validation_failed` — se envían ambas formas, o el texto incumple una regla de texto enriquecido (ver [Campos de texto enriquecido](https://docs.probara.net/es/developers/api-reference/#campos-de-texto-enriquecido)). Una imagen que nunca se preparó, o que expiró, responde con `details.code` `unknown_image`.
- `403 forbidden` — rol visualizador.
- `409` — las reglas de estado de la ejecución de arriba.
- `413 storage_quota_exceeded` — las imágenes llevarían a la organización por encima de su cuota de almacenamiento. No se cambia nada.

**Auditoría:** emite `run.case_step_actual_result_set` con el cambio de texto plano de `actual_result`.

## Lectura

`GET /api/v1/runs/{runUlid}/cases/{runCaseUlid}` devuelve el `actualResult` (Markdown) y el `actualResultDocument` de cada paso. Ambos son `null` cuando el paso no tiene resultado.

## Imágenes

Prepara una imagen con `POST /api/v1/images:stage` antes del guardado que la referencia. Quitar la imagen del texto y guardar la elimina, salvo que otro texto o una revisión guardada todavía la referencie. Las imágenes de un resultado cuentan para la cuota de almacenamiento de la organización en la categoría `content_image`. Un guardado que no añade imágenes nunca se rechaza por almacenamiento.

## Operaciones sobre un caso de la ejecución

- `POST /api/v1/runs/{runUlid}/cases/{runCaseUlid}/retry` — reinicia el caso (y sus snapshots de pasos congelados) a `untested` y recalcula el agregado de la ejecución. Emite `run.case_retried`.
- `DELETE /api/v1/runs/{runUlid}/cases/{runCaseUlid}` — elimina el caso junto con sus pasos y recalcula el agregado de la ejecución. Emite `run.case_removed`.

Ambas siguen la regla de ejecución cerrada de arriba.

## Relacionado

- [Adjuntos de resultado](https://docs.probara.net/es/developers/api/result-attachments/) — archivos de cualquier tipo adjuntos a un resultado completo
- [Snapshots de resultados de ejecución](https://docs.probara.net/es/developers/api/run-result-snapshots/) — lo que conserva un resultado completado
- [Configuración de ejecución](https://docs.probara.net/es/developers/api/project-run-settings/) — `allowResultsInClosedRuns` y el resto del vocabulario de configuraciones de ejecución
- [Referencia interactiva v1](https://docs.probara.net/es/developers/api-reference/v1/) — esquemas completos
