# App configuration

Load the invoking App's parameters and connector policy as one record.

## When to use it

Use this as the source of a parameter-driven app workflow. It supplies the invoking app’s parameters and connector choices for that execution. A published release resolves its pinned settings; editing today’s draft does not change a run already admitted against an older release.

## Add and configure

1. Add **App configuration** 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 `app_config`.

## Settings

| Setting | Accepted value | Required | Default | What it controls |
| --- | --- | --- | --- | --- |
| App Id (`app_id`) | string; minimum characters 1; maximum characters 100 | Yes | Not specified | The App's id (slug). Template recipes render `${app.id}` here; 1-100 chars, [a-z0-9][a-z0-9-]*. |
| App Pk (`app_pk`) | string; minimum characters 1 | Yes | Not specified | The current app-instance UUID. Template recipes supply ${app.pk}. Recreating the app changes this identity; a stale identity is rejected rather than reading another instance’s configuration. |

## Inputs and outputs

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

### Outputs record fields

| Setting | Accepted value | Required | Default | What it controls |
| --- | --- | --- | --- | --- |
| AppRef (`app`) | object | Yes | Not specified | The App incarnation this run was launched for. |
| Id (`app.id`) | string | Yes | Not specified | The App's stable id. |
| Pk (`app.pk`) | string | Yes | Not specified | The incarnation's primary key. |
| Connectors (`connectors`) | object of object | Yes | Not specified | Connector policy by catalog slug. |
| Loaded At (`loaded_at`) | string | Yes | Not specified | UTC ISO-8601 instant this configuration was read — the edition's clock, stamped once and carried, never re-read per step. |
| Memory Token (`memory_token`) | string or null | Yes | Not specified | Opaque token scoping this App's URL memory; null when there is none. REQUIRED here while the WIRE model's copy is optional, and the asymmetry is deliberate — see the class docstring. |
| Params (`params`) | object | Yes | Not specified | The App's parameter values (schema defaults applied). |
| Revision (`revision`) | integer | Yes | Not specified | The App's params revision. |

## Effects, testing, and recovery

Reads an external source.

The declared preview behaviour is to execute this step. Reads, processing, or model usage can therefore be real. Read [dry runs](/docs/workflows/dry-runs) before using a preview with live connections.

No duplicate-prevention key is declared for this step. Do not assume that manually repeating the step is free of repeated effects.

## Example: Load a provisioned App's parameters and connector policy

Step settings:

```json
{
  "app_id": "expense-reports",
  "app_pk": "3f2b6c1e-8d4a-4c7b-9e2f-5a1d0c3b7e61"
}
```

## Example: Run after an upstream step (the inbound edge only sequences)

Step settings:

```json
{
  "app_id": "expense-reports",
  "app_pk": "3f2b6c1e-8d4a-4c7b-9e2f-5a1d0c3b7e61"
}
```

Input records:

```json
[
  {
    "ready": true
  }
]
```

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