# Review Queue

Review proposals against captured sources, record decisions, and retain their history.

## Add it to an app

1. Open the app builder and find **Review Queue** in the component palette.
2. Insert it into the intended region or container.
3. Set its properties in the inspector. Use a literal for a fixed value or a binding for a value supplied by the app.
4. Connect its events where the app should respond to a user gesture.
5. Preview with representative data and save after resolving validation problems.

The type name in the builder’s code view is `review_queue`.

## Settings

| Setting | Accepted value | Required | Default | What it controls |
| --- | --- | --- | --- | --- |
| Submit button label (`createLabel`) | string | No | Not specified | — |
| Selected supporting language (`evidenceSelection`) | object or null | No | Not specified | Supports expression bindings. A source review ID, exact revision and citation list selected by an App. Unavailable evidence remains a review issue. |
| Review plugin (`extension`) | string | No | Not specified | The enabled review extension that defines the operation. |
| Editable proposal fields (`fields`) | list of object | No | Not specified | — |
| label (`fields[].label`) | string | Yes | Not specified | — |
| path (`fields[].path`) | string | Yes | Not specified | — |
| type (`fields[].type`) | "text" / "boolean" / "date" | No | Not specified | Expected value type. Values must meet this type before they are usable as typed data. |
| Generation workflow source (`generationSourceId`) | string | No | Not specified | — |
| Proposal kind (`kind`) | string | No | "document-change" | The listed default is inserted when adding a new component. |
| Proposed values (`proposal`) | object or null | No | Not specified | Supports expression bindings. |
| Source document keys (`sourceKeys`) | list of string | No | Not specified | Supports expression bindings. |
| Document role choices (`sourceRoles`) | list of object | No | Not specified | Require an explicit role for each captured document before generation. Passed to the admitted review plugin as options.source_roles keyed by immutable content hash; role validation belongs to the plugin. |
| label (`sourceRoles[].label`) | string | Yes | Not specified | — |
| maxCount (`sourceRoles[].maxCount`) | integer; minimum 0 | No | Not specified | Maximum captured documents assigned this role before generation. |
| minCount (`sourceRoles[].minCount`) | integer; minimum 0 | No | Not specified | Minimum captured documents assigned this role before generation. |
| value (`sourceRoles[].value`) | string | Yes | Not specified | — |
| Title (`title`) | string | No | "Review queue" | The listed default is inserted when adding a new component. |

## Values available to bindings

| Value | Type | Initial value | Meaning |
| --- | --- | --- | --- |
| `generation` | object or null | null | Last loaded saved generation receipt; retained across proposal selection, cleared when its source changes or a new generation starts. |
| `projection` | object or null | null | Latest reviewed state. |
| `review` | object or null | null | The exact loaded review revision and payload; cleared while another review loads. |
| `reviewId` | string or null | null | The opened review. |
| `revision` | integer or null | null | The loaded revision. |
| `status` | string or null | null | The loaded decision state. |

Refer to these values through `components.<component-id>.<value>` in a binding. Use the identifier assigned to this instance of Review Queue, not the component type name.

## Events

- `onChange` — A review operation has committed.

- `onContextChange` — The selected review or dated projection context changed. Clear dependent App selections.

Connect only the actions the app needs. An event can fetch results, run an enabled data source, set state, update another component, show a notification, or navigate where supported.

## Keyboard and accessible labels

Accessible label source: Named by title.

## Example: Review proposed terms

| Setting | Example value |
| --- | --- |
| `fields` | [{"label":"Threshold","path":"term.threshold"}] |

## If it is empty or unavailable

Check the source binding, the selected item, and the app’s access. A hosted document, table, review, or storage component needs the corresponding app capability; an offline preview cannot supply live private data. A source running with no results is different from an invalid binding. Inspect the app’s workflow and data source before changing the presentation.
