# Publish pending review proposals

Publish pending review proposals

## When to use it

Publish validated candidates as pending reviews. Publication rechecks the source basis and current app ownership. The ledger is the authoritative review record; a derived result row is a way to display that record, not a substitute for its decision history.

## Add and configure

1. Add **Publish pending review proposals** 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 `publish_review_proposals`.

## 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.
