# Extract revision-preserving evidence

Extract revision-preserving evidence

## When to use it

Read captured sources while preserving revision identity and source context. Later review and validation refer to those captured bytes. Replacing the current document does not silently change the evidence associated with an earlier proposal.

## Add and configure

1. Add **Extract revision-preserving evidence** from the workflow step picker.
2. Give the step a recognisable name and connect its required inputs.
3. Set the options below. Nested names identify fields within an object or a list item.
4. Validate the recipe, inspect the test result, then run it on the intended data.

The step identifier used in the editor’s code view is `extract_review_evidence`.

## Settings

| Setting | Accepted value | Required | Default | What it controls |
| --- | --- | --- | --- | --- |
| App Id (`app_id`) | string; pattern `^[a-z0-9][a-z0-9-]{0,99}$` | Yes | Not specified | The app identifier that owns the target data or operation. |
| App Pk (`app_pk`) | string; format uuid | Yes | Not specified | The UUID identifying the current app instance; use the identity supplied for this app, not another instance. |
| Extension (`extension`) | string; pattern `^[a-z][a-z0-9_]{0,63}$` | Yes | Not specified | The enabled review extension that defines the operation. |
| Options (`options`) | object | No | Not specified | Options accepted by the selected domain operation. Use its documented shape; an open object is not a guarantee that every key has an effect. |

## Inputs and outputs

| Direction | Port | Content | Required | Multiple records |
| --- | --- | --- | --- | --- |
| Inputs | `in` | records | Yes | Yes |
| Outputs | `out` | records | Yes | Yes |

## Effects, testing, and recovery

Writes information inside Strive.

The declared preview behaviour is to skip this step. Configuration can affect preview behaviour; HTTP GET is a notable exception. Read [dry runs](/docs/workflows/dry-runs) before using a preview with live connections.

Duplicate prevention uses the operation’s natural identity. The step declares safe replay for its supported recovery path.

### Execution bounds

| Limit | Declared bound |
| --- | --- |
| max input bytes | 6291456 |
| max output bytes | 6291456 |
| max records | 100 |
| memory mb | 256 |
| timeout seconds | 600 |

Recovery policy: ambiguous outcome: manual_resolution; cancellation: cooperative; errors: invalid_input, invalid_config, quota_exhausted, timeout, recovery_unsafe, upstream_rejected; max attempts: 1.

## Example: Review workflow stage

Step settings:

```json
{
  "app_id": "review",
  "app_pk": "11111111-1111-4111-8111-111111111111",
  "extension": "review"
}
```

Input records:

```json
[
  {
    "expected_revision": 1,
    "generation_key": "11111111-1111-4111-8111-111111111111",
    "review_id": "11111111-1111-4111-8111-111111111111"
  }
]
```

## Check the result

Inspect the selected run’s status, counts, errors, and output records. An empty collection can be a valid result, and a completed step can contain per-record failures where the step defines that behaviour. Check the next step’s expected record shape before publishing or delivering the result.
