# airdress.function.*

{/* Generated by scripts/generate-event-reference.mjs from https://schemas.airdress.co/operator/events/v1.json (operator v0.1.138).
    Do not edit by hand: run `pnpm generate:event-reference` and commit the result. */}

The events in the `airdress.function` family. How to read a section, and what
each audience means, is on the [event reference](/events/) page.

## `airdress.function.config_unavailable`

Owner warn

A function's configuration could not be resolved, so it was not run — for an event, or for a request to its route.

Names the config key and the secret it refers to, never a value; still credential metadata, so not on the bus.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `function` | string | yes |  |
| `key` | string | yes |  |
| `secret` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function's configuration could not be resolved, so it was not run — for an event, or for a request to its route.\n\nNames the config key and the secret it refers to, never a value; still credential metadata, so not on the bus.",
  "properties": {
    "function": {
      "type": "string"
    },
    "key": {
      "type": "string"
    },
    "secret": {
      "type": "string"
    }
  },
  "required": [
    "function",
    "key",
    "secret"
  ],
  "title": "FunctionConfigUnavailable",
  "type": "object"
}
```

</details>

## `airdress.function.event.deduplicated`

Owner debug

An event already delivered to a function was not delivered again.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `event_id` | string | yes |  |
| `function` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "An event already delivered to a function was not delivered again.",
  "properties": {
    "event_id": {
      "type": "string"
    },
    "function": {
      "type": "string"
    }
  },
  "required": [
    "event_id",
    "function"
  ],
  "title": "FunctionEventDeduplicated",
  "type": "object"
}
```

</details>

## `airdress.function.events_lagged`

Owner warn

The function event dispatcher fell behind the stream; events were skipped, not delivered. A diagnostic: not on the bus.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `skipped` | integer (uint64) | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "The function event dispatcher fell behind the stream; events were skipped, not delivered. A diagnostic: not on the bus.",
  "properties": {
    "skipped": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "skipped"
  ],
  "title": "FunctionEventsLagged",
  "type": "object"
}
```

</details>

## `airdress.function.filter.failed`

Owner warn Functions

A function's event filter failed to evaluate; the event was not delivered.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `dialect` | string | yes |  |
| `filter` | integer (uint) | yes | The filter's position in the function's list. |
| `function` | string | yes |  |
| `over_budget` | boolean | yes |  |
| `reason` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function's event filter failed to evaluate; the event was not delivered.",
  "properties": {
    "dialect": {
      "type": "string"
    },
    "filter": {
      "description": "The filter's position in the function's list.",
      "format": "uint",
      "minimum": 0,
      "type": "integer"
    },
    "function": {
      "type": "string"
    },
    "over_budget": {
      "type": "boolean"
    },
    "reason": {
      "type": "string"
    }
  },
  "required": [
    "dialect",
    "filter",
    "function",
    "over_budget",
    "reason"
  ],
  "title": "FunctionFilterFailed",
  "type": "object"
}
```

</details>

## `airdress.function.load_failed`

Owner warn Functions

A function did not load.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `function` | string | yes |  |
| `message` | string | yes |  |
| `reason` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function did not load.",
  "properties": {
    "function": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "reason": {
      "type": "string"
    }
  },
  "required": [
    "function",
    "message",
    "reason"
  ],
  "title": "FunctionLoadFailed",
  "type": "object"
}
```

</details>

## `airdress.function.loaded`

Owner info Functions

A function compiled and was bound to its route.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `bundle_sha256` | string | yes |  |
| `enabled` | boolean | yes |  |
| `function` | string | yes |  |
| `function_id` | string | yes |  |
| `hosts` | array of string | yes | The outbound hosts it was granted, resolved. |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function compiled and was bound to its route.",
  "properties": {
    "bundle_sha256": {
      "type": "string"
    },
    "enabled": {
      "type": "boolean"
    },
    "function": {
      "type": "string"
    },
    "function_id": {
      "type": "string"
    },
    "hosts": {
      "description": "The outbound hosts it was granted, resolved.",
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "bundle_sha256",
    "enabled",
    "function",
    "function_id",
    "hosts"
  ],
  "title": "FunctionLoaded",
  "type": "object"
}
```

</details>

## `airdress.function.logs.evicted`

Owner info

The function log sweep evicted rows. Housekeeping: not on the bus.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `rows` | integer (uint64) | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "The function log sweep evicted rows. Housekeeping: not on the bus.",
  "properties": {
    "rows": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "rows"
  ],
  "title": "FunctionLogsEvicted",
  "type": "object"
}
```

</details>

## `airdress.function.quarantined`

Owner warn Functions

A function stopped serving: the key that signed its source was revoked as compromised.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `function` | string | yes |  |
| `message` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function stopped serving: the key that signed its source was revoked as compromised.",
  "properties": {
    "function": {
      "type": "string"
    },
    "message": {
      "type": "string"
    }
  },
  "required": [
    "function",
    "message"
  ],
  "title": "FunctionQuarantined",
  "type": "object"
}
```

</details>

## `airdress.function.sdk.withdrawn`

Owner warn Functions

A function stopped: the library release it pins was withdrawn.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `function` | string | yes |  |
| `sdk` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function stopped: the library release it pins was withdrawn.",
  "properties": {
    "function": {
      "type": "string"
    },
    "sdk": {
      "type": "string"
    }
  },
  "required": [
    "function",
    "sdk"
  ],
  "title": "FunctionSdkWithdrawn",
  "type": "object"
}
```

</details>

## `airdress.function.source.published`

Owner info Functions

A new function source version was published.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `actor` | string | yes |  |
| `files` | integer (uint) | yes |  |
| `function` | string | yes |  |
| `version` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A new function source version was published.",
  "properties": {
    "actor": {
      "type": "string"
    },
    "files": {
      "format": "uint",
      "minimum": 0,
      "type": "integer"
    },
    "function": {
      "type": "string"
    },
    "version": {
      "type": "string"
    }
  },
  "required": [
    "actor",
    "files",
    "function",
    "version"
  ],
  "title": "FunctionSourcePublished",
  "type": "object"
}
```

</details>

## `airdress.function.source.refused`

Owner info Functions

A function source publish was refused.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `actor` | string | yes |  |
| `status` | integer (uint16) | yes | The HTTP status the publish was answered with. |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function source publish was refused.",
  "properties": {
    "actor": {
      "type": "string"
    },
    "status": {
      "description": "The HTTP status the publish was answered with.",
      "format": "uint16",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "actor",
    "status"
  ],
  "title": "FunctionSourceRefused",
  "type": "object"
}
```

</details>

## `airdress.function.source.stale_write_refused`

Owner info Functions

A publish or promote was refused because the function moved since the writer read it.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `actor` | string | yes |  |
| `based_on` | string | yes | The version the writer said it read; empty when it said none. |
| `current` | string | yes | The version serving; empty when none. |
| `function` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A publish or promote was refused because the function moved since the writer read it.",
  "properties": {
    "actor": {
      "type": "string"
    },
    "based_on": {
      "description": "The version the writer said it read; empty when it said none.",
      "type": "string"
    },
    "current": {
      "description": "The version serving; empty when none.",
      "type": "string"
    },
    "function": {
      "type": "string"
    }
  },
  "required": [
    "actor",
    "based_on",
    "current",
    "function"
  ],
  "title": "FunctionSourceStaleWriteRefused",
  "type": "object"
}
```

</details>

## `airdress.function.tool.deduplicated`

Owner info

A retried tool call was answered from the first call rather than run again. A diagnostic: not on the bus.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `function` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A retried tool call was answered from the first call rather than run again. A diagnostic: not on the bus.",
  "properties": {
    "function": {
      "type": "string"
    }
  },
  "required": [
    "function"
  ],
  "title": "FunctionToolDeduplicated",
  "type": "object"
}
```

</details>

## `airdress.function.unsigned_bundle_accepted`

Owner warn

An unsigned local bundle was loaded because the config allows it. Repeats on every reconcile: not on the bus.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `path` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "An unsigned local bundle was loaded because the config allows it. Repeats on every reconcile: not on the bus.",
  "properties": {
    "path": {
      "type": "string"
    }
  },
  "required": [
    "path"
  ],
  "title": "FunctionUnsignedBundleAccepted",
  "type": "object"
}
```

</details>

## `airdress.function.unsigned_source_accepted`

Owner warn

Unsigned function source was accepted because the config allows it. Repeats on every load: not on the bus.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

It carries no fields.

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "Unsigned function source was accepted because the config allows it. Repeats on every load: not on the bus.",
  "title": "FunctionUnsignedSourceAccepted",
  "type": "object"
}
```

</details>

## `airdress.function.unsigned_source_loaded`

Owner warn

A function is serving unsigned source because the config allows it. Repeats on every reconcile: not on the bus.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `function` | string | yes |  |
| `version` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function is serving unsigned source because the config allows it. Repeats on every reconcile: not on the bus.",
  "properties": {
    "function": {
      "type": "string"
    },
    "version": {
      "type": "string"
    }
  },
  "required": [
    "function",
    "version"
  ],
  "title": "FunctionUnsignedSourceLoaded",
  "type": "object"
}
```

</details>

## `airdress.function.version.deployed`

Owner info Functions

A stored source version started serving a function.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `actor` | string or null | no |  |
| `function` | string | yes |  |
| `generation` | integer (int64) | yes |  |
| `previous` | string or null | no |  |
| `version` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A stored source version started serving a function.",
  "properties": {
    "actor": {
      "type": [
        "string",
        "null"
      ]
    },
    "function": {
      "type": "string"
    },
    "generation": {
      "format": "int64",
      "type": "integer"
    },
    "previous": {
      "type": [
        "string",
        "null"
      ]
    },
    "version": {
      "type": "string"
    }
  },
  "required": [
    "function",
    "generation",
    "version"
  ],
  "title": "FunctionVersionDeployed",
  "type": "object"
}
```

</details>

## `airdress.function.version.evicted`

Owner info Functions

The operator evicted a stored source version to stay under the owner's store limits.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `actor` | string | yes |  |
| `bytes` | integer (int64) | yes |  |
| `function` | string | yes |  |
| `reason` | string | yes |  |
| `version` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "The operator evicted a stored source version to stay under the owner's store limits.",
  "properties": {
    "actor": {
      "type": "string"
    },
    "bytes": {
      "format": "int64",
      "type": "integer"
    },
    "function": {
      "type": "string"
    },
    "reason": {
      "type": "string"
    },
    "version": {
      "type": "string"
    }
  },
  "required": [
    "actor",
    "bytes",
    "function",
    "reason",
    "version"
  ],
  "title": "FunctionVersionEvicted",
  "type": "object"
}
```

</details>

## `airdress.function.version.promote_refused`

Owner info Functions

A function version promote was refused.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `actor` | string | yes |  |
| `function` | string | yes |  |
| `status` | integer (uint16) | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function version promote was refused.",
  "properties": {
    "actor": {
      "type": "string"
    },
    "function": {
      "type": "string"
    },
    "status": {
      "format": "uint16",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "actor",
    "function",
    "status"
  ],
  "title": "FunctionVersionPromoteRefused",
  "type": "object"
}
```

</details>

## `airdress.function.version.promoted`

Owner info Functions

A stored function version was promoted to serving.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `actor` | string | yes |  |
| `function` | string | yes |  |
| `generation` | integer (int64) | yes |  |
| `previous` | string | yes | The version it replaced; empty when none. |
| `version` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A stored function version was promoted to serving.",
  "properties": {
    "actor": {
      "type": "string"
    },
    "function": {
      "type": "string"
    },
    "generation": {
      "format": "int64",
      "type": "integer"
    },
    "previous": {
      "description": "The version it replaced; empty when none.",
      "type": "string"
    },
    "version": {
      "type": "string"
    }
  },
  "required": [
    "actor",
    "function",
    "generation",
    "previous",
    "version"
  ],
  "title": "FunctionVersionPromoted",
  "type": "object"
}
```

</details>

## `airdress.function.version_refused`

Owner warn Functions

An apply of a new function version was refused; the serving version keeps serving.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.133.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `function` | string | yes |  |
| `message` | string | yes |  |
| `reason` | string | yes | The condition reason. |
| `same_version` | boolean | yes |  |
| `serving` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "An apply of a new function version was refused; the serving version keeps serving.",
  "properties": {
    "function": {
      "type": "string"
    },
    "message": {
      "type": "string"
    },
    "reason": {
      "description": "The condition reason.",
      "type": "string"
    },
    "same_version": {
      "type": "boolean"
    },
    "serving": {
      "type": "string"
    }
  },
  "required": [
    "function",
    "message",
    "reason",
    "same_version",
    "serving"
  ],
  "title": "FunctionVersionRefused",
  "type": "object"
}
```

</details>