> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bijection.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Module: components

> Shared component execution and query contracts.

Shared component execution and query contracts. No component owns this SDK layer.

## Type Aliases

### AccessRequest

Ƭ **AccessRequest**: [`Infer`](/api/modules/values#infer)\<typeof [`accessRequest`](/api/modules/components#accessrequest)>

***

### AccessGrant

Ƭ **AccessGrant**: [`Infer`](/api/modules/values#infer)\<typeof [`accessGrant`](/api/modules/components#accessgrant)>

***

### AccessPolicy

Ƭ **AccessPolicy**: [`FunctionReference`](/api/modules/server#functionreference)\<`"query"`, `"public"` | `"internal"`, [`AccessRequest`](/api/modules/components#accessrequest-2), [`AccessGrant`](/api/modules/components#accessgrant-2)>

***

### PageOptions

Ƭ **PageOptions**: [`Infer`](/api/modules/values#infer)\<typeof [`pageOptions`](/api/modules/components#pageoptions)>

***

### Issue

Ƭ **Issue**: [`Infer`](/api/modules/values#infer)\<typeof [`issue`](/api/modules/components#issue)>

***

### ReviewProposer

Ƭ **ReviewProposer**: `"you"` | `"another"` | `null`

Who proposed an item, reduced to what the reader can act on.

***

### ReviewTarget

Ƭ **ReviewTarget**: `Object`

Which of the owning component's declared operations reviews the item, and
the arguments the shared dialog is opened with. `operation` is the export
name inside the component (`review`, `release`); `preset` holds strings the
dialog parses against the operation's own validators.

#### Type declaration

| Name | Type | Description |
| :- | :- | :- |
| `operation` | `string` | - |
| `id` | `string` | - |
| `preset` | `Record`\<`string`, `string`> | - |
| `choice?` | [`ReviewChoice`](/api/modules/components#reviewchoice) | A decision the reviewer makes first; see [ReviewChoice](/api/modules/components#reviewchoice). |

***

### ReviewOption

Ƭ **ReviewOption**: `Object`

One option of a [ReviewChoice](/api/modules/components#reviewchoice): its stable id within the item, what
the reader sees, and the arguments it adds to the target's preset.

#### Type declaration

| Name | Type | Description |
| :- | :- | :- |
| `id` | `string` | - |
| `label` | `string` | - |
| `detail?` | `string` | - |
| `preset` | `Record`\<`string`, `string`> | - |
| `presetLabels?` | `Record`\<`string`, `string`> | What some of this option's preset values mean in words, keyed by the preset argument (`{ selected: "Atlas Manufacturing" }` for `selected: "customer:c2"`), so a dialog and its preview can name a value the operation's validator types only as a string. Presentation only; each key names a preset argument and each text is bounded by [REVIEW\_LABEL\_MAX](/api/modules/components#review_label_max). |

***

### ReviewChoice

Ƭ **ReviewChoice**: `Object`

A decision the review needs before it can be requested: `label` asks the
question, and exactly one option is picked. The component still rechecks
the picked value inside its operation.

#### Type declaration

| Name | Type |
| :- | :- |
| `label` | `string` |
| `options` | [`ReviewOption`](/api/modules/components#reviewoption)\[] |

***

### ReviewEvidenceRow

Ƭ **ReviewEvidenceRow**: `Object`

One row of [ReviewEvidence](/api/modules/components#reviewevidence): what the row is about and one value per
column.

#### Type declaration

| Name | Type |
| :- | :- |
| `label` | `string` |
| `values` | `string`\[] |

***

### ReviewEvidence

Ƭ **ReviewEvidence**: `Object`

A bounded, read-only account of what a review item rests on.

`columns` name the sides shown: one column for a plain summary, several for
a comparison. Each row holds exactly one value per column. `comparison`
says the later columns are compared with the first, so a reader may be
shown where their text differs (a byte comparison, never the owner's
scoring rule). `isComplete` is false when rows, columns or text were cut
to the contract's bounds.

#### Type declaration

| Name | Type |
| :- | :- |
| `label` | `string` |
| `columns` | `string`\[] |
| `rows` | [`ReviewEvidenceRow`](/api/modules/components#reviewevidencerow)\[] |
| `comparison` | `boolean` |
| `isComplete` | `boolean` |

***

### ReviewProgress

Ƭ **ReviewProgress**: `Object`

An item's quorum as the component recorded it at the read: the distinct
approvals counted so far, how many the item requires, and this reader's own
vote, if they cast one.

#### Type declaration

| Name | Type |
| :- | :- |
| `approvals` | `number` |
| `required` | `number` |
| `yours` | `"approved"` \| `"rejected"` \| `null` |

***

### ReviewItem

Ƭ **ReviewItem**: `Object`

One item awaiting an independent reviewer.

#### Type declaration

| Name | Type | Description |
| :- | :- | :- |
| `id` | `string` | The component's own identity of the item. |
| `kind` | `string` | The owning component's feature kind (`AppFeature.kind`). |
| `title` | `string` | - |
| `revision` | `string` \| `number` \| `null` | The item's revision exactly as the component reports it. |
| `proposedAt` | `number` | The component's record creation time, epoch milliseconds exactly as the component recorded it (a Bijection `_creationTime` may carry a fraction). Never a business time. |
| `proposer` | [`ReviewProposer`](/api/modules/components#reviewproposer) | - |
| `state` | `string` | The component's own state word, byte-exact. |
| `target?` | [`ReviewTarget`](/api/modules/components#reviewtarget) | - |
| `destinationId?` | `string` | What the owning feature's destination opens on for this item: the route's `id`. Absent when the page has nothing narrower to open. |
| `evidence?` | [`ReviewEvidence`](/api/modules/components#reviewevidence) | What the item rests on; see [ReviewEvidence](/api/modules/components#reviewevidence). |
| `progress?` | [`ReviewProgress`](/api/modules/components#reviewprogress) | How far the item is from its quorum; see [ReviewProgress](/api/modules/components#reviewprogress). |

***

### ReviewQueuePage

Ƭ **ReviewQueuePage**: `Object`

One bounded page of a component's review queue.

#### Type declaration

| Name | Type | Description |
| :- | :- | :- |
| `items` | [`ReviewItem`](/api/modules/components#reviewitem)\[] | - |
| `isComplete` | `boolean` | False when more items may exist than this read examined. |
| `restricted` | `number` | What this read withheld from this caller: items it examined, or whole declared scopes the application's policy refused before any item was read. Each component's helper states its unit. Never zero by omission. |

***

### ReviewQueueReference

Ƭ **ReviewQueueReference**: [`FunctionReference`](/api/modules/server#functionreference)\<`"query"`, `"public"`, `Record`\<`string`, `never`>, [`ReviewQueuePage`](/api/modules/components#reviewqueuepage)>

The reference a component's `./workspace` entry declares as `reviewQueue`
and its `./application` helper serves. It takes no arguments: the bound and
the order are the contract's.

## Variables

### selectionContext

• `Const` **selectionContext**: [`VUnion`](/api/classes/values.VUnion)\<\{ `kind`: `"promotion"` ; `previous`: `null` | `string` ; `evaluation`: \{ id: string; run: string; contract: string; digest: string; suite: string; recorder: string; executor: string; findings: \{ value: number; target: number; metric: string; passes: boolean; }\[]; references: \{ ...; }\[]; } ; `channel`: `string` ; `candidate`: \{ id: string; run: string; digest: string; producer: string; artifact: string; registeredBy: string; } ; `adapter`: \{ key: string; contract: string; }  } | \{ `kind`: `"withdrawal"` ; `version`: `null` | `string` ; `previous`: `string` ; `channel`: `string`  }, \[[`VObject`](/api/classes/values.VObject)\<\{ `kind`: `"promotion"` ; `previous`: `null` | `string` ; `evaluation`: \{ id: string; run: string; contract: string; digest: string; suite: string; recorder: string; executor: string; findings: \{ value: number; target: number; metric: string; passes: boolean; }\[]; references: \{ ...; }\[]; } ; `channel`: `string` ; `candidate`: \{ id: string; run: string; digest: string; producer: string; artifact: string; registeredBy: string; } ; `adapter`: \{ key: string; contract: string; }  }, \{ `kind`: [`VLiteral`](/api/classes/values.VLiteral)\<`"promotion"`, `"required"`> ; `channel`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `previous`: [`VUnion`](/api/classes/values.VUnion)\<`null` | `string`, \[[`VNull`](/api/classes/values.VNull)\<`null`, `"required"`>, [`VString`](/api/classes/values.VString)\<`string`, `"required"`>], `"required"`, `never`> ; `candidate`: [`VObject`](/api/classes/values.VObject)\<\{ `id`: `string` ; `run`: `string` ; `digest`: `string` ; `producer`: `string` ; `artifact`: `string` ; `registeredBy`: `string`  }, \{ `id`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `run`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `artifact`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `digest`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `producer`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `registeredBy`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`>  }, `"required"`, `"id"` | `"run"` | `"digest"` | `"producer"` | `"artifact"` | `"registeredBy"`> ; `evaluation`: [`VObject`](/api/classes/values.VObject)\<\{ `id`: `string` ; `run`: `string` ; `contract`: `string` ; `digest`: `string` ; `suite`: `string` ; `recorder`: `string` ; `executor`: `string` ; `findings`: \{ value: number; target: number; metric: string; passes: boolean; }\[] ; `references`: \{ contract: string; dataset: string; versionId: string; }\[]  }, \{ `id`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `run`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `suite`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `contract`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `digest`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `recorder`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `executor`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `findings`: [`VArray`](/api/classes/values.VArray)\<\{ `value`: `number` ; `target`: `number` ; `metric`: `string` ; `passes`: `boolean`  }\[], [`VObject`](/api/classes/values.VObject)\<\{ `value`: `number` ; `target`: `number` ; `metric`: `string` ; `passes`: `boolean`  }, \{ `metric`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `value`: [`VFloat64`](/api/classes/values.VFloat64)\<`number`, `"required"`> ; `target`: [`VFloat64`](/api/classes/values.VFloat64)\<`number`, `"required"`> ; `passes`: [`VBoolean`](/api/classes/values.VBoolean)\<`boolean`, `"required"`>  }, `"required"`, `"value"` | `"target"` | `"metric"` | `"passes"`>, `"required"`> ; `references`: [`VArray`](/api/classes/values.VArray)\<\{ `contract`: `string` ; `dataset`: `string` ; `versionId`: `string`  }\[], [`VObject`](/api/classes/values.VObject)\<\{ `contract`: `string` ; `dataset`: `string` ; `versionId`: `string`  }, \{ `versionId`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `dataset`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `contract`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`>  }, `"required"`, `"contract"` | `"dataset"` | `"versionId"`>, `"required"`>  }, `"required"`, `"id"` | `"run"` | `"contract"` | `"digest"` | `"suite"` | `"recorder"` | `"executor"` | `"findings"` | `"references"`> ; `adapter`: [`VObject`](/api/classes/values.VObject)\<\{ `key`: `string` ; `contract`: `string`  }, \{ `key`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `contract`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`>  }, `"required"`, `"key"` | `"contract"`>  }, `"required"`, `"kind"` | `"previous"` | `"evaluation"` | `"channel"` | `"candidate"` | `"adapter"` | `"evaluation.id"` | `"evaluation.run"` | `"evaluation.contract"` | `"evaluation.digest"` | `"evaluation.suite"` | `"evaluation.recorder"` | `"evaluation.executor"` | `"evaluation.findings"` | `"evaluation.references"` | `"candidate.id"` | `"candidate.run"` | `"candidate.digest"` | `"candidate.producer"` | `"candidate.artifact"` | `"candidate.registeredBy"` | `"adapter.key"` | `"adapter.contract"`>, [`VObject`](/api/classes/values.VObject)\<\{ `kind`: `"withdrawal"` ; `version`: `null` | `string` ; `previous`: `string` ; `channel`: `string`  }, \{ `kind`: [`VLiteral`](/api/classes/values.VLiteral)\<`"withdrawal"`, `"required"`> ; `channel`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `previous`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `version`: [`VUnion`](/api/classes/values.VUnion)\<`null` | `string`, \[[`VNull`](/api/classes/values.VNull)\<`null`, `"required"`>, [`VString`](/api/classes/values.VString)\<`string`, `"required"`>], `"required"`, `never`>  }, `"required"`, `"kind"` | `"version"` | `"previous"` | `"channel"`>], `"required"`, `"kind"` | `"version"` | `"previous"` | `"evaluation"` | `"channel"` | `"candidate"` | `"adapter"` | `"evaluation.id"` | `"evaluation.run"` | `"evaluation.contract"` | `"evaluation.digest"` | `"evaluation.suite"` | `"evaluation.recorder"` | `"evaluation.executor"` | `"evaluation.findings"` | `"evaluation.references"` | `"candidate.id"` | `"candidate.run"` | `"candidate.digest"` | `"candidate.producer"` | `"candidate.artifact"` | `"candidate.registeredBy"` | `"adapter.key"` | `"adapter.contract"`>

Resolved by the model owner after loading and checking retained evidence.

***

### accessRequest

• `Const` **accessRequest**: [`VObject`](/api/classes/values.VObject)\<\{ `resource`: \{ kind: string; key: string; } ; `selection`: `null` | \{ kind: "promotion"; previous: string | null; evaluation: \{ id: string; run: string; contract: string; digest: string; suite: string; recorder: string; executor: string; findings: \{ value: number; target: number; metric: string; passes: boolean; }\[]; references: \{ ...; }\[]; }; channel: string; candidate: \{ ...; }; a... | \{ kind: "withdrawal"; version: string | null; previous: string; channel: string; } ; `operation`: `string` ; `actor`: `string` ; `approver`: `null` | `string`  }, \{ `actor`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `resource`: [`VObject`](/api/classes/values.VObject)\<\{ `kind`: `string` ; `key`: `string`  }, \{ `kind`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `key`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`>  }, `"required"`, `"kind"` | `"key"`> ; `operation`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `approver`: [`VUnion`](/api/classes/values.VUnion)\<`null` | `string`, \[[`VNull`](/api/classes/values.VNull)\<`null`, `"required"`>, [`VString`](/api/classes/values.VString)\<`string`, `"required"`>], `"required"`, `never`> ; `selection`: [`VUnion`](/api/classes/values.VUnion)\<`null` | \{ `kind`: `"promotion"` ; `previous`: `null` | `string` ; `evaluation`: \{ id: string; run: string; contract: string; digest: string; suite: string; recorder: string; executor: string; findings: \{ value: number; target: number; metric: string; passes: boolean; }\[]; references: \{ ...; }\[]; } ; `channel`: `string` ; `candidate`: \{ id: string; run: string; digest: string; producer: string; artifact: string; registeredBy: string; } ; `adapter`: \{ key: string; contract: string; }  } | \{ `kind`: `"withdrawal"` ; `version`: `null` | `string` ; `previous`: `string` ; `channel`: `string`  }, \[[`VNull`](/api/classes/values.VNull)\<`null`, `"required"`>, [`VUnion`](/api/classes/values.VUnion)\<\{ `kind`: `"promotion"` ; `previous`: `null` | `string` ; `evaluation`: \{ id: string; run: string; contract: string; digest: string; suite: string; recorder: string; executor: string; findings: \{ value: number; target: number; metric: string; passes: boolean; }\[]; references: \{ ...; }\[]; } ; `channel`: `string` ; `candidate`: \{ id: string; run: string; digest: string; producer: string; artifact: string; registeredBy: string; } ; `adapter`: \{ key: string; contract: string; }  } | \{ `kind`: `"withdrawal"` ; `version`: `null` | `string` ; `previous`: `string` ; `channel`: `string`  }, \[[`VObject`](/api/classes/values.VObject)\<\{ `kind`: `"promotion"` ; `previous`: `null` | `string` ; `evaluation`: \{ id: string; run: string; contract: string; digest: string; suite: string; recorder: string; executor: string; findings: \{ value: number; target: number; metric: string; passes: boolean; }\[]; references: \{ ...; }\[]; } ; `channel`: `string` ; `candidate`: \{ id: string; run: string; digest: string; producer: string; artifact: string; registeredBy: string; } ; `adapter`: \{ key: string; contract: string; }  }, \{ `kind`: [`VLiteral`](/api/classes/values.VLiteral)\<`"promotion"`, `"required"`> ; `channel`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `previous`: [`VUnion`](/api/classes/values.VUnion)\<`null` | `string`, \[[`VNull`](/api/classes/values.VNull)\<`null`, `"required"`>, [`VString`](/api/classes/values.VString)\<`string`, `"required"`>], `"required"`, `never`> ; `candidate`: [`VObject`](/api/classes/values.VObject)\<\{ `id`: `string` ; `run`: `string` ; `digest`: `string` ; `producer`: `string` ; `artifact`: `string` ; `registeredBy`: `string`  }, \{ `id`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `run`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `artifact`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `digest`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `producer`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `registeredBy`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`>  }, `"required"`, `"id"` | `"run"` | `"digest"` | `"producer"` | `"artifact"` | `"registeredBy"`> ; `evaluation`: [`VObject`](/api/classes/values.VObject)\<\{ `id`: `string` ; `run`: `string` ; `contract`: `string` ; `digest`: `string` ; `suite`: `string` ; `recorder`: `string` ; `executor`: `string` ; `findings`: \{ value: number; target: number; metric: string; passes: boolean; }\[] ; `references`: \{ contract: string; dataset: string; versionId: string; }\[]  }, \{ `id`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `run`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `suite`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `contract`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `digest`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `recorder`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `executor`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `findings`: [`VArray`](/api/classes/values.VArray)\<\{ `value`: `number` ; `target`: `number` ; `metric`: `string` ; `passes`: `boolean`  }\[], [`VObject`](/api/classes/values.VObject)\<\{ `value`: `number` ; `target`: `number` ; `metric`: `string` ; `passes`: `boolean`  }, \{ `metric`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `value`: [`VFloat64`](/api/classes/values.VFloat64)\<`number`, `"required"`> ; `target`: [`VFloat64`](/api/classes/values.VFloat64)\<`number`, `"required"`> ; `passes`: [`VBoolean`](/api/classes/values.VBoolean)\<`boolean`, `"required"`>  }, `"required"`, `"value"` | `"target"` | `"metric"` | `"passes"`>, `"required"`> ; `references`: [`VArray`](/api/classes/values.VArray)\<\{ `contract`: `string` ; `dataset`: `string` ; `versionId`: `string`  }\[], [`VObject`](/api/classes/values.VObject)\<\{ `contract`: `string` ; `dataset`: `string` ; `versionId`: `string`  }, \{ `versionId`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `dataset`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `contract`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`>  }, `"required"`, `"contract"` | `"dataset"` | `"versionId"`>, `"required"`>  }, `"required"`, `"id"` | `"run"` | `"contract"` | `"digest"` | `"suite"` | `"recorder"` | `"executor"` | `"findings"` | `"references"`> ; `adapter`: [`VObject`](/api/classes/values.VObject)\<\{ `key`: `string` ; `contract`: `string`  }, \{ `key`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `contract`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`>  }, `"required"`, `"key"` | `"contract"`>  }, `"required"`, `"kind"` | `"previous"` | `"evaluation"` | `"channel"` | `"candidate"` | `"adapter"` | `"evaluation.id"` | `"evaluation.run"` | `"evaluation.contract"` | `"evaluation.digest"` | `"evaluation.suite"` | `"evaluation.recorder"` | `"evaluation.executor"` | `"evaluation.findings"` | `"evaluation.references"` | `"candidate.id"` | `"candidate.run"` | `"candidate.digest"` | `"candidate.producer"` | `"candidate.artifact"` | `"candidate.registeredBy"` | `"adapter.key"` | `"adapter.contract"`>, [`VObject`](/api/classes/values.VObject)\<\{ `kind`: `"withdrawal"` ; `version`: `null` | `string` ; `previous`: `string` ; `channel`: `string`  }, \{ `kind`: [`VLiteral`](/api/classes/values.VLiteral)\<`"withdrawal"`, `"required"`> ; `channel`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `previous`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `version`: [`VUnion`](/api/classes/values.VUnion)\<`null` | `string`, \[[`VNull`](/api/classes/values.VNull)\<`null`, `"required"`>, [`VString`](/api/classes/values.VString)\<`string`, `"required"`>], `"required"`, `never`>  }, `"required"`, `"kind"` | `"version"` | `"previous"` | `"channel"`>], `"required"`, `"kind"` | `"version"` | `"previous"` | `"evaluation"` | `"channel"` | `"candidate"` | `"adapter"` | `"evaluation.id"` | `"evaluation.run"` | `"evaluation.contract"` | `"evaluation.digest"` | `"evaluation.suite"` | `"evaluation.recorder"` | `"evaluation.executor"` | `"evaluation.findings"` | `"evaluation.references"` | `"candidate.id"` | `"candidate.run"` | `"candidate.digest"` | `"candidate.producer"` | `"candidate.artifact"` | `"candidate.registeredBy"` | `"adapter.key"` | `"adapter.contract"`>], `"required"`, `"kind"` | `"version"` | `"previous"` | `"evaluation"` | `"channel"` | `"candidate"` | `"adapter"` | `"evaluation.id"` | `"evaluation.run"` | `"evaluation.contract"` | `"evaluation.digest"` | `"evaluation.suite"` | `"evaluation.recorder"` | `"evaluation.executor"` | `"evaluation.findings"` | `"evaluation.references"` | `"candidate.id"` | `"candidate.run"` | `"candidate.digest"` | `"candidate.producer"` | `"candidate.artifact"` | `"candidate.registeredBy"` | `"adapter.key"` | `"adapter.contract"`>  }, `"required"`, `"resource"` | `"selection"` | `"operation"` | `"actor"` | `"approver"` | `"resource.kind"` | `"resource.key"` | `"selection.kind"` | `"selection.version"` | `"selection.previous"` | `"selection.evaluation"` | `"selection.channel"` | `"selection.candidate"` | `"selection.adapter"` | `"selection.evaluation.id"` | `"selection.evaluation.run"` | `"selection.evaluation.contract"` | `"selection.evaluation.digest"` | `"selection.evaluation.suite"` | `"selection.evaluation.recorder"` | `"selection.evaluation.executor"` | `"selection.evaluation.findings"` | `"selection.evaluation.references"` | `"selection.candidate.id"` | `"selection.candidate.run"` | `"selection.candidate.digest"` | `"selection.candidate.producer"` | `"selection.candidate.artifact"` | `"selection.candidate.registeredBy"` | `"selection.adapter.key"` | `"selection.adapter.contract"`>

***

### accessGrant

• `Const` **accessGrant**: [`VUnion`](/api/classes/values.VUnion)\<`null` | \{ `scope`: `string`  }, \[[`VNull`](/api/classes/values.VNull)\<`null`, `"required"`>, [`VObject`](/api/classes/values.VObject)\<\{ `scope`: `string`  }, \{ `scope`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`>  }, `"required"`, `"scope"`>], `"required"`, `"scope"`>

***

### pageOptions

• `Const` **pageOptions**: [`VObject`](/api/classes/values.VObject)\<\{ `cursor`: `null` | `string` ; `limit`: `number`  }, \{ `cursor`: [`VUnion`](/api/classes/values.VUnion)\<`null` | `string`, \[[`VNull`](/api/classes/values.VNull)\<`null`, `"required"`>, [`VString`](/api/classes/values.VString)\<`string`, `"required"`>], `"required"`, `never`> ; `limit`: [`VFloat64`](/api/classes/values.VFloat64)\<`number`, `"required"`>  }, `"required"`, `"cursor"` | `"limit"`>

Bounded discovery through the application's existing policy, never an admin scan.

***

### failureCodes

• `Const` **failureCodes**: readonly \[`"invalid_request"`, `"contract_mismatch"`, `"input_unavailable"`, `"access_denied"`, `"execution_failed"`, `"archived"`, `"study_not_finished"`, `"evaluation_mismatch"`, `"promotion_conflict"`, `"state_conflict"`, `"bound_exceeded"`, `"independent_reviewer_required"`, `"not_selected"`]

***

### issue

• `Const` **issue**: [`VObject`](/api/classes/values.VObject)\<\{ `step`: `undefined` | `string` ; `code`: `"bound_exceeded"` | `"internal"` | `"invalid_request"` | `"archived"` | `"access_denied"` | `"contract_mismatch"` | `"input_unavailable"` | `"execution_failed"` | `"study_not_finished"` | `"evaluation_mismatch"` | `"promotion_conflict"` | `"state_conflict"` | `"independent_reviewer_required"` | `"not_selected"` ; `message`: `string` ; `retryable`: `boolean`  }, \{ `code`: [`VUnion`](/api/classes/values.VUnion)\<`"bound_exceeded"` | `"internal"` | `"invalid_request"` | `"archived"` | `"access_denied"` | `"contract_mismatch"` | `"input_unavailable"` | `"execution_failed"` | `"study_not_finished"` | `"evaluation_mismatch"` | `"promotion_conflict"` | `"state_conflict"` | `"independent_reviewer_required"` | `"not_selected"`, \[[`VLiteral`](/api/classes/values.VLiteral)\<`"invalid_request"`, `"required"`>, [`VLiteral`](/api/classes/values.VLiteral)\<`"contract_mismatch"`, `"required"`>, [`VLiteral`](/api/classes/values.VLiteral)\<`"input_unavailable"`, `"required"`>, [`VLiteral`](/api/classes/values.VLiteral)\<`"access_denied"`, `"required"`>, [`VLiteral`](/api/classes/values.VLiteral)\<`"execution_failed"`, `"required"`>, [`VLiteral`](/api/classes/values.VLiteral)\<`"archived"`, `"required"`>], `"required"`, `never`> ; `message`: [`VString`](/api/classes/values.VString)\<`string`, `"required"`> ; `retryable`: [`VBoolean`](/api/classes/values.VBoolean)\<`boolean`, `"required"`> ; `step`: [`VString`](/api/classes/values.VString)\<`undefined` | `string`, `"optional"`>  }, `"required"`, `"code"` | `"message"` | `"retryable"` | `"step"`>

***

### REQUEST\_KEY\_MAX

• `Const` **REQUEST\_KEY\_MAX**: `128`

The longest request key any component accepts.

***

### REVIEW\_APPROVALS\_MAX

• `Const` **REVIEW\_APPROVALS\_MAX**: `5`

The most independent approvals one item may require.

***

### REVIEW\_QUEUE\_MAX

• `Const` **REVIEW\_QUEUE\_MAX**: `25`

The most items one component's review queue returns.

***

### REVIEW\_CHOICE\_OPTIONS\_MAX

• `Const` **REVIEW\_CHOICE\_OPTIONS\_MAX**: `32`

The most options one review choice offers, and the longest label, option
detail, and option or destination id an item may carry.

***

### REVIEW\_LABEL\_MAX

• `Const` **REVIEW\_LABEL\_MAX**: `200`

***

### REVIEW\_DETAIL\_MAX

• `Const` **REVIEW\_DETAIL\_MAX**: `500`

***

### REVIEW\_ID\_MAX

• `Const` **REVIEW\_ID\_MAX**: `512`

***

### REVIEW\_EVIDENCE\_COLUMNS\_MAX

• `Const` **REVIEW\_EVIDENCE\_COLUMNS\_MAX**: `4`

The most columns and rows one item's evidence carries. Each cell and
label is bounded by [REVIEW\_LABEL\_MAX](/api/modules/components#review_label_max).

***

### REVIEW\_EVIDENCE\_ROWS\_MAX

• `Const` **REVIEW\_EVIDENCE\_ROWS\_MAX**: `16`

## Functions

### authorize

▸ **authorize**(`ctx`, `handle`, `request`, `scope?`): `Promise`\<`string`>

#### Parameters

| Name | Type |
| :- | :- |
| `ctx` | `Ctx` |
| `handle` | `string` |
| `request` | `Object` |
| `request.resource` | \{ kind: string; key: string; } |
| `request.selection` | `null` \| \{ kind: "promotion"; previous: string \| null; evaluation: \{ id: string; run: string; contract: string; digest: string; suite: string; recorder: string; executor: string; findings: \{ value: number; target: number; metric: string; passes: boolean; }\[]; references: \{ ...; }\[]; }; channel: string; candidate: \{ ...; }; a... \| \{ kind: "withdrawal"; version: string \| null; previous: string; channel: string; } |
| `request.operation` | `string` |
| `request.actor` | `string` |
| `request.approver` | `null` \| `string` |
| `scope?` | `string` |

#### Returns

`Promise`\<`string`>

***

### permits

▸ **permits**(`ctx`, `handle`, `requested`, `scope?`): `Promise`\<`string` | `null`>

The same authorization, asked as a question instead of a demand.

A bounded page that must omit the rows its caller may not read needs the
answer, not the exception. This is not a second policy: it calls
[authorize](/api/modules/components#authorize) — the one owner of the grant/scope rule — and turns that
owner's own typed refusal into `null`. Every other failure propagates, so a
broken policy function is still a broken read and never a silently short
page.

It resolves one request. A caller filtering many rows is responsible for
keeping the number of resolutions inside its page bound, which is why the
filter callers here memoize by the exact `(handle, resource, operation)` a
row carries: within one query the basis is fixed, so the same request has
the same answer.

#### Parameters

| Name | Type |
| :- | :- |
| `ctx` | `Ctx` |
| `handle` | `string` |
| `requested` | `Object` |
| `requested.resource` | \{ kind: string; key: string; } |
| `requested.selection` | `null` \| \{ kind: "promotion"; previous: string \| null; evaluation: \{ id: string; run: string; contract: string; digest: string; suite: string; recorder: string; executor: string; findings: \{ value: number; target: number; metric: string; passes: boolean; }\[]; references: \{ ...; }\[]; }; channel: string; candidate: \{ ...; }; a... \| \{ kind: "withdrawal"; version: string \| null; previous: string; channel: string; } |
| `requested.operation` | `string` |
| `requested.actor` | `string` |
| `requested.approver` | `null` \| `string` |
| `scope?` | `string` |

#### Returns

`Promise`\<`string` | `null`>

***

### request

▸ **request**(`actor`, `kind`, `key`, `operation`, `approver?`, `selection?`): [`AccessRequest`](/api/modules/components#accessrequest-2)

#### Parameters

| Name | Type | Default value |
| :- | :- | :- |
| `actor` | `string` | `undefined` |
| `kind` | `string` | `undefined` |
| `key` | `string` | `undefined` |
| `operation` | `string` | `undefined` |
| `approver` | `null` \| `string` | `null` |
| `selection` | `null` \| \{ `kind`: `"promotion"` ; `previous`: `null` \| `string` ; `evaluation`: \{ id: string; run: string; contract: string; digest: string; suite: string; recorder: string; executor: string; findings: \{ value: number; target: number; metric: string; passes: boolean; }\[]; references: \{ ...; }\[]; } ; `channel`: `string` ; `candidate`: \{ id: string; run: string; digest: string; producer: string; artifact: string; registeredBy: string; } ; `adapter`: \{ key: string; contract: string; }  } \| \{ `kind`: `"withdrawal"` ; `version`: `null` \| `string` ; `previous`: `string` ; `channel`: `string`  } | `null` |

#### Returns

[`AccessRequest`](/api/modules/components#accessrequest-2)

***

### bound

▸ **bound**(`limit`, `max?`): `number`

An explicit result bound for a single-page inspection read. Inspection is
read-mostly discovery through the containing application's own policy, so it
takes a limit instead of a cursor: the caller asks for at most `max` records
and learns from `isComplete` whether more exist.

#### Parameters

| Name | Type | Default value |
| :- | :- | :- |
| `limit` | `number` | `undefined` |
| `max` | `number` | `50` |

#### Returns

`number`

***

### pagination

▸ **pagination**(`options`): `Object`

#### Parameters

| Name | Type |
| :- | :- |
| `options` | `Object` |
| `options.cursor` | `null` \| `string` |
| `options.limit` | `number` |

#### Returns

`Object`

| Name | Type |
| :- | :- |
| `numItems` | `number` |
| `cursor` | `null` \| `string` |

***

### canonical

▸ **canonical**(`value`): `string`

Stable serialization of exact Bijection values for component contracts.

#### Parameters

| Name | Type |
| :- | :- |
| `value` | `unknown` |

#### Returns

`string`

***

### fail

▸ **fail**(`code`, `message`, `retryable?`): `never`

#### Parameters

| Name | Type | Default value |
| :- | :- | :- |
| `code` | `"bound_exceeded"` \| `"internal"` \| `"invalid_request"` \| `"archived"` \| `"access_denied"` \| `"contract_mismatch"` \| `"input_unavailable"` \| `"execution_failed"` \| `"study_not_finished"` \| `"evaluation_mismatch"` \| `"promotion_conflict"` \| `"state_conflict"` \| `"independent_reviewer_required"` \| `"not_selected"` | `undefined` |
| `message` | `string` | `undefined` |
| `retryable` | `boolean` | `false` |

#### Returns

`never`

***

### isAccessDenied

▸ **isAccessDenied**(`error`): `boolean`

True for a component's own refusal to disclose a resource.

The single predicate every exposure helper uses to decide that one item of a
bounded page is "not visible to you" rather than broken. It matches the exact
typed code [fail](/api/modules/components#fail) raises from [authorize](/api/modules/components#authorize); a message is never
inspected, and every other failure — including an error that is not a
`BijectionError` at all — is not an access denial and must propagate.

#### Parameters

| Name | Type |
| :- | :- |
| `error` | `unknown` |

#### Returns

`boolean`

***

### classify

▸ **classify**(`error`, `step?`): [`Issue`](/api/modules/components#issue-2)

#### Parameters

| Name | Type |
| :- | :- |
| `error` | `unknown` |
| `step?` | `string` |

#### Returns

[`Issue`](/api/modules/components#issue-2)

***

### componentOperationForwarders

▸ **componentOperationForwarders**\<`Operation`>(`name`, `operation`): `Object`

#### Type parameters

| Name | Type |
| :- | :- |
| `Operation` | extends [`OperationReference`](/api/modules/server#operationreference)\<`any`, `any`, `any`, `any`> |

#### Parameters

| Name | Type |
| :- | :- |
| `name` | `string` |
| `operation` | () => `Operation` |

#### Returns

`Object`

***

### requireRequestKey

▸ **requireRequestKey**(`key`): `void`

Refuse a key that is empty or longer than [REQUEST\_KEY\_MAX](/api/modules/components#request_key_max).

#### Parameters

| Name | Type |
| :- | :- |
| `key` | `string` |

#### Returns

`void`

***

### refuseChangedRequest

▸ **refuseChangedRequest**(`changed`): `void`

Refuse a repeat of a retained request whose arguments changed. The caller
decides `changed` under its own contract, after any refusal that must take
precedence (access to the retained request, its archival).

#### Parameters

| Name | Type |
| :- | :- |
| `changed` | `boolean` |

#### Returns

`void`

***

### validReviewProgress

▸ **validReviewProgress**(`progress`): `boolean`

Whether progress is within the contract: integers with
`1 <= required <= REVIEW_APPROVALS_MAX` and `0 <= approvals <= required`,
and a vote that is one of the two verdicts or null.

#### Parameters

| Name | Type |
| :- | :- |
| `progress` | [`ReviewProgress`](/api/modules/components#reviewprogress) |

#### Returns

`boolean`

***

### validReviewEvidence

▸ **validReviewEvidence**(`evidence`): `boolean`

Whether evidence is within the contract: a non-empty label, 1 to
[REVIEW\_EVIDENCE\_COLUMNS\_MAX](/api/modules/components#review_evidence_columns_max) columns, 1 to
[REVIEW\_EVIDENCE\_ROWS\_MAX](/api/modules/components#review_evidence_rows_max) rows of exactly one value per column, and
every text within [REVIEW\_LABEL\_MAX](/api/modules/components#review_label_max).

#### Parameters

| Name | Type |
| :- | :- |
| `evidence` | [`ReviewEvidence`](/api/modules/components#reviewevidence) |

#### Returns

`boolean`

***

### reviewEvidence

▸ **reviewEvidence**(`input`): [`ReviewEvidence`](/api/modules/components#reviewevidence) | `undefined`

Builds evidence within the contract from what a helper read: columns and
rows beyond the bounds are dropped, text is cut, a missing cell is empty,
and `isComplete` says whether anything was cut. `undefined` when there is
no row or no column to show, so an item never carries an empty account.

#### Parameters

| Name | Type |
| :- | :- |
| `input` | `Object` |
| `input.label` | `string` |
| `input.columns` | readonly `string`\[] |
| `input.rows` | readonly \{ `label`: `string` ; `values`: readonly string\[]  }\[] |
| `input.comparison?` | `boolean` |

#### Returns

[`ReviewEvidence`](/api/modules/components#reviewevidence) | `undefined`

***

### validReviewChoice

▸ **validReviewChoice**(`choice`): `boolean`

Whether a choice is within the contract: 1 to
[REVIEW\_CHOICE\_OPTIONS\_MAX](/api/modules/components#review_choice_options_max) options with distinct non-empty ids,
bounded labels and details, string presets, and preset labels that name
only preset arguments.

#### Parameters

| Name | Type |
| :- | :- |
| `choice` | [`ReviewChoice`](/api/modules/components#reviewchoice) |

#### Returns

`boolean`

***

### reviewProposer

▸ **reviewProposer**(`actor`, `reader`): [`ReviewProposer`](/api/modules/components#reviewproposer)

Reduces a stored principal to the contract's proposer.

#### Parameters

| Name | Type |
| :- | :- |
| `actor` | `undefined` \| `null` \| `string` |
| `reader` | `string` |

#### Returns

[`ReviewProposer`](/api/modules/components#reviewproposer)

***

### reviewQueuePage

▸ **reviewQueuePage**(`items`, `isComplete`, `restricted`): [`ReviewQueuePage`](/api/modules/components#reviewqueuepage)

Builds the page every helper returns: newest first, cut to
[REVIEW\_QUEUE\_MAX](/api/modules/components#review_queue_max), and incomplete when anything was cut. The order is
`proposedAt` descending with the id as a deterministic tie-break.

#### Parameters

| Name | Type |
| :- | :- |
| `items` | readonly [`ReviewItem`](/api/modules/components#reviewitem)\[] |
| `isComplete` | `boolean` |
| `restricted` | `number` |

#### Returns

[`ReviewQueuePage`](/api/modules/components#reviewqueuepage)

***

### requireIndependentReview

▸ **requireIndependentReview**(`reviewer`, `parties`): `void`

The one independence law every reviewing component applies inside the
transaction that records a review: the reviewer is none of the parties
whose work is under review (its proposer, and where the component records
them, whoever registered or produced it).

#### Parameters

| Name | Type |
| :- | :- |
| `reviewer` | `string` |
| `parties` | readonly `string`\[] |

#### Returns

`void`

***

### validateParameters

▸ **validateParameters**(`schema`, `value`, `depth?`): `void`

The deliberately small parameter profile is checked again in the component.

#### Parameters

| Name | Type | Default value |
| :- | :- | :- |
| `schema` | [`ValidatorJSON`](/api/modules/values#validatorjson) | `undefined` |
| `value` | `unknown` | `undefined` |
| `depth` | `number` | `0` |

#### Returns

`void`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.