# B.29 outcome.*

_Peios / Using Peios / Events / Field Index_

> Every field the evman catalogue defines under outcome: its type, values and meaning, and the events that carry it.

Every field the catalogue defines under `outcome`, in path order. Each entry gives the field's definition and, under **Carried by**, every event type that writes it.

## B.29.1 <a id="outcome.address"></a>`outcome.address`

- **Type:** `uint`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

The user-space address that faulted when the kernel tried to copy from or
to it. Meaningful only within the faulting process's address space, and
only until that address space changes.

**Carried by:**

No event carries this field yet.

## B.29.2 <a id="outcome.cleanup"></a>`outcome.cleanup`

- **Type:** `str.enum`
- **Values:** `succeeded` · `failed` · `declined`
- **Set:** closed
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

The outcome of the compensating action StrataFS took to undo part of a
failed operation, such as removing an object it had just created.
`declined` means StrataFS deliberately did not undo it, because the name
no longer referred to the object it had created and removing it could
have removed someone else's.

Both `failed` and `declined` leave an object behind in the stratum that
nothing in the merged view accounts for.

**Carried by:**

No event carries this field yet.

## B.29.3 <a id="outcome.data-lost"></a>`outcome.data-lost`

- **Type:** `bool`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

Whether the outcome a record describes destroyed data, rather than only
failing to do what was asked. Set this aside from ordinary failures: a
data-losing outcome is not recovered by retrying.

**Carried by:**

No event carries this field yet.

## B.29.4 <a id="outcome.deferred"></a>`outcome.deferred`

- **Type:** `bool`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

Whether a refusal was raised after the caller had already been told the
operation succeeded. A deferred refusal has nobody left to receive an
error, which is why it is recorded unconditionally rather than only for
the arrangement errors.

**Carried by:**

- [`stratafs.mutation.refused`](/peios/using-peios/events/stratafs/stratafs-mutation-refused.md)

## B.29.5 <a id="outcome.detail"></a>`outcome.detail`

- **Type:** `str`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

Free text about the outcome, for a person to read. Optional, and never
parsed: anything a consumer would filter on belongs in `outcome.reason` or
a field of its own. Never the output of a language's debug formatter.

**Carried by:**

- [`eventd.store.quarantined`](/peios/using-peios/events/eventd/eventd-store-quarantined.md)
- [`peinit.config.reload.applied`](/peios/using-peios/events/peinit/peinit-config-reload-applied.md)
- [`peinit.critical-service.failed`](/peios/using-peios/events/peinit/peinit-critical-service-failed.md)
- [`peinit.graph.validation.failed`](/peios/using-peios/events/peinit/peinit-graph-validation-failed.md)
- [`peinit.job.ended`](/peios/using-peios/events/peinit/peinit-job-ended.md)
- [`peinit.operation.ended`](/peios/using-peios/events/peinit/peinit-operation-ended.md)
- [`peinit.recovery.entered`](/peios/using-peios/events/peinit/peinit-recovery-entered.md)
- [`peipkg.action.authorised`](/peios/using-peios/events/peipkg/peipkg-action-authorised.md)
- [`peipkg.claim.changed`](/peios/using-peios/events/peipkg/peipkg-claim-changed.md)
- [`peipkg.package.installed`](/peios/using-peios/events/peipkg/peipkg-package-installed.md)
- [`peipkg.package.uninstalled`](/peios/using-peios/events/peipkg/peipkg-package-uninstalled.md)
- [`peipkg.package.upgraded`](/peios/using-peios/events/peipkg/peipkg-package-upgraded.md)
- [`peipkg.repository.added`](/peios/using-peios/events/peipkg/peipkg-repository-added.md)
- [`peipkg.repository.removed`](/peios/using-peios/events/peipkg/peipkg-repository-removed.md)
- [`peipkg.transaction.recovered`](/peios/using-peios/events/peipkg/peipkg-transaction-recovered.md)

## B.29.6 <a id="outcome.errno"></a>`outcome.errno`

- **Type:** `int.errno`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

The error the operation failed with, as a negative errno. Absent on
success. Present where an event records an outcome that has a specific
failure rather than only a boolean.

**Carried by:**

- [`kacs.audit.descriptor.changed`](/peios/using-peios/events/kacs/kacs-audit-descriptor-changed.md)
- [`kacs.caap.policy.changed`](/peios/using-peios/events/kacs/kacs-caap-policy-changed.md)
- [`kacs.config.value.rejected`](/peios/using-peios/events/kacs/kacs-config-value-rejected.md)
- [`kacs.impersonation.reverted`](/peios/using-peios/events/kacs/kacs-impersonation-reverted.md)
- [`kacs.impersonation.started`](/peios/using-peios/events/kacs/kacs-impersonation-started.md)
- [`kacs.signature.crypto.failed`](/peios/using-peios/events/kacs/kacs-signature-crypto-failed.md)
- [`kmes.buffer.swap.failed`](/peios/using-peios/events/kmes/kmes-buffer-swap-failed.md)
- [`kmes.config.refresh.failed`](/peios/using-peios/events/kmes/kmes-config-refresh-failed.md)
- [`lcs.audit.backup.ended`](/peios/using-peios/events/lcs/lcs-audit-backup-ended.md)
- [`lcs.audit.key.deleted`](/peios/using-peios/events/lcs/lcs-audit-key-deleted.md)
- [`lcs.audit.key.descriptor.changed`](/peios/using-peios/events/lcs/lcs-audit-key-descriptor-changed.md)
- [`lcs.audit.key.hidden`](/peios/using-peios/events/lcs/lcs-audit-key-hidden.md)
- [`lcs.audit.key.tombstoned`](/peios/using-peios/events/lcs/lcs-audit-key-tombstoned.md)
- [`lcs.audit.restore.ended`](/peios/using-peios/events/lcs/lcs-audit-restore-ended.md)
- [`lcs.audit.transaction.committed`](/peios/using-peios/events/lcs/lcs-audit-transaction-committed.md)
- [`lcs.audit.value.deleted`](/peios/using-peios/events/lcs/lcs-audit-value-deleted.md)
- [`lcs.audit.value.set`](/peios/using-peios/events/lcs/lcs-audit-value-set.md)
- [`ntfe.policy.rejected`](/peios/using-peios/events/ntfe/ntfe-policy-rejected.md)
- [`peinit.event.dropped`](/peios/using-peios/events/peinit/peinit-event-dropped.md)
- [`stratafs.file.copied-up`](/peios/using-peios/events/stratafs/stratafs-file-copied-up.md)
- [`stratafs.mutation.refused`](/peios/using-peios/events/stratafs/stratafs-mutation-refused.md)

## B.29.7 <a id="outcome.errno-cleanup"></a>`outcome.errno-cleanup`

- **Type:** `int.errno`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

The error a compensating action failed with, when an operation failed and
its undo failed too. Read with `outcome.errno`, the error of the operation
itself: the pair is how orphaned objects come to exist. Absent when the
undo succeeded or was not attempted.

**Carried by:**

No event carries this field yet.

## B.29.8 <a id="outcome.errno-masked"></a>`outcome.errno-masked`

- **Type:** `int.errno`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

The error an underlying step actually failed with, where StrataFS
returned a different one to the caller. `outcome.errno` holds the error
the caller saw; this field holds the one it replaced, which is usually the
one that explains the failure.

**Carried by:**

No event carries this field yet.

## B.29.9 <a id="outcome.fallback"></a>`outcome.fallback`

- **Type:** `bool`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

Whether the operation took a fallback path because the mechanism it
prefers was unavailable. The operation still completed, by a slower or
coarser route.

**Carried by:**

No event carries this field yet.

## B.29.10 <a id="outcome.field"></a>`outcome.field`

- **Type:** `str`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

The name of the structure field an error was attributed to, such as the
member of an argument structure that was out of range.

**Carried by:**

No event carries this field yet.

## B.29.11 <a id="outcome.invariant-violated"></a>`outcome.invariant-violated`

- **Type:** `bool`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

Whether an internal invariant was found broken and execution continued
anyway. A record with this set describes a state the code assumes cannot
happen, so treat whatever follows it on the same mount as suspect.

**Carried by:**

No event carries this field yet.

## B.29.12 <a id="outcome.offset"></a>`outcome.offset`

- **Type:** `uint`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

The byte offset within the input at which parsing failed. Read with
`outcome.field` where the input is a structure.

**Carried by:**

No event carries this field yet.

## B.29.13 <a id="outcome.reason"></a>`outcome.reason`

- **Type:** `str.enum`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

Why the operation resolved the way it did. Each event declares its own
values: a list, or a curated subset of a `uapi/pkm/trace.h` family, which
carries codes that are never event reasons. A trace code is rendered with
the family prefix stripped and case folded, so `KACS_FSR_GRANT_DENY`
presents as `grant-deny`, and an investigation escalating from the event
stream to a live trace sees the same decision described in the same terms.

**Carried by:**

- [`authd.logon.attempted`](/peios/using-peios/events/authd/authd-logon-attempted.md)
- [`authd.service.attested`](/peios/using-peios/events/authd/authd-service-attested.md)
- [`authd.session.ended`](/peios/using-peios/events/authd/authd-session-ended.md)
- [`kacs.audit.handle.used`](/peios/using-peios/events/kacs/kacs-audit-handle-used.md)
- [`kacs.caap.sacl.skipped`](/peios/using-peios/events/kacs/kacs-caap-sacl-skipped.md)
- [`kacs.config.value.rejected`](/peios/using-peios/events/kacs/kacs-config-value-rejected.md)
- [`kacs.descriptor.rejected`](/peios/using-peios/events/kacs/kacs-descriptor-rejected.md)
- [`kacs.impersonation.started`](/peios/using-peios/events/kacs/kacs-impersonation-started.md)
- [`lcs.audit.transaction.committed`](/peios/using-peios/events/lcs/lcs-audit-transaction-committed.md)
- [`lcs.source.response.rejected`](/peios/using-peios/events/lcs/lcs-source-response-rejected.md)
- [`lpsd.account.created`](/peios/using-peios/events/lpsd/lpsd-account-created.md)
- [`lpsd.account.deleted`](/peios/using-peios/events/lpsd/lpsd-account-deleted.md)
- [`lpsd.account.modified`](/peios/using-peios/events/lpsd/lpsd-account-modified.md)
- [`lpsd.credential.changed`](/peios/using-peios/events/lpsd/lpsd-credential-changed.md)
- [`lpsd.credential.verified`](/peios/using-peios/events/lpsd/lpsd-credential-verified.md)
- [`lpsd.group.created`](/peios/using-peios/events/lpsd/lpsd-group-created.md)
- [`lpsd.group.deleted`](/peios/using-peios/events/lpsd/lpsd-group-deleted.md)
- [`lpsd.group.member.added`](/peios/using-peios/events/lpsd/lpsd-group-member-added.md)
- [`lpsd.group.member.removed`](/peios/using-peios/events/lpsd/lpsd-group-member-removed.md)
- [`ntfe.policy.rejected`](/peios/using-peios/events/ntfe/ntfe-policy-rejected.md)
- [`ntfe.verdict.reported`](/peios/using-peios/events/ntfe/ntfe-verdict-reported.md)
- [`peinit.boot.downgraded`](/peios/using-peios/events/peinit/peinit-boot-downgraded.md)
- [`peinit.critical-service.failed`](/peios/using-peios/events/peinit/peinit-critical-service-failed.md)
- [`peinit.fd-store.rejected`](/peios/using-peios/events/peinit/peinit-fd-store-rejected.md)
- [`peinit.graph.validation.failed`](/peios/using-peios/events/peinit/peinit-graph-validation-failed.md)
- [`peinit.graph.validation.warned`](/peios/using-peios/events/peinit/peinit-graph-validation-warned.md)
- [`peinit.notify.rejected`](/peios/using-peios/events/peinit/peinit-notify-rejected.md)
- [`peinit.on-failure.suppressed`](/peios/using-peios/events/peinit/peinit-on-failure-suppressed.md)
- [`peinit.recovery.entered`](/peios/using-peios/events/peinit/peinit-recovery-entered.md)
- [`peipkg.claim.changed`](/peios/using-peios/events/peipkg/peipkg-claim-changed.md)
- [`peipkg.package.installed`](/peios/using-peios/events/peipkg/peipkg-package-installed.md)
- [`peipkg.package.uninstalled`](/peios/using-peios/events/peipkg/peipkg-package-uninstalled.md)
- [`peipkg.package.upgraded`](/peios/using-peios/events/peipkg/peipkg-package-upgraded.md)
- [`peipkg.repository.added`](/peios/using-peios/events/peipkg/peipkg-repository-added.md)

## B.29.14 <a id="outcome.result-raw"></a>`outcome.result-raw`

- **Type:** `int`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

A raw result from an internal step that was neither zero nor a valid
negative errno, recorded instead of being passed on. Deliberately not
`outcome.errno`: a value outside the errno range returned from an open
could reach the caller as a pointer to a file, so StrataFS converts it to
`EIO`, and this field holds what it caught.

**Carried by:**

No event carries this field yet.

## B.29.15 <a id="outcome.reverted"></a>`outcome.reverted`

- **Type:** `bool`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

Whether a credential change the kernel had prepared was silently undone,
so that the call returned success having changed nothing. The caller is
told it worked; this is the only record that it did not.

**Carried by:**

No event carries this field yet.

## B.29.16 <a id="outcome.success"></a>`outcome.success`

- **Type:** `bool`
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

Whether the operation succeeded. What counts as success narrows per event;
read the event's own note before computing a rate over it.

**Carried by:**

- [`authd.logon.attempted`](/peios/using-peios/events/authd/authd-logon-attempted.md)
- [`authd.service.attested`](/peios/using-peios/events/authd/authd-service-attested.md)
- [`authd.session.ended`](/peios/using-peios/events/authd/authd-session-ended.md)
- [`kacs.audit.access.checked`](/peios/using-peios/events/kacs/kacs-audit-access-checked.md)
- [`kacs.audit.descriptor.changed`](/peios/using-peios/events/kacs/kacs-audit-descriptor-changed.md)
- [`kacs.audit.handle.used`](/peios/using-peios/events/kacs/kacs-audit-handle-used.md)
- [`kacs.audit.privilege.used`](/peios/using-peios/events/kacs/kacs-audit-privilege-used.md)
- [`kacs.caap.policy.changed`](/peios/using-peios/events/kacs/kacs-caap-policy-changed.md)
- [`kacs.impersonation.reverted`](/peios/using-peios/events/kacs/kacs-impersonation-reverted.md)
- [`kacs.impersonation.started`](/peios/using-peios/events/kacs/kacs-impersonation-started.md)
- [`kacs.mount.policy.changed`](/peios/using-peios/events/kacs/kacs-mount-policy-changed.md)
- [`lcs.audit.backup.ended`](/peios/using-peios/events/lcs/lcs-audit-backup-ended.md)
- [`lcs.audit.key.created`](/peios/using-peios/events/lcs/lcs-audit-key-created.md)
- [`lcs.audit.key.deleted`](/peios/using-peios/events/lcs/lcs-audit-key-deleted.md)
- [`lcs.audit.key.descriptor.changed`](/peios/using-peios/events/lcs/lcs-audit-key-descriptor-changed.md)
- [`lcs.audit.key.hidden`](/peios/using-peios/events/lcs/lcs-audit-key-hidden.md)
- [`lcs.audit.key.opened`](/peios/using-peios/events/lcs/lcs-audit-key-opened.md)
- [`lcs.audit.key.tombstoned`](/peios/using-peios/events/lcs/lcs-audit-key-tombstoned.md)
- [`lcs.audit.restore.ended`](/peios/using-peios/events/lcs/lcs-audit-restore-ended.md)
- [`lcs.audit.transaction.committed`](/peios/using-peios/events/lcs/lcs-audit-transaction-committed.md)
- [`lcs.audit.value.deleted`](/peios/using-peios/events/lcs/lcs-audit-value-deleted.md)
- [`lcs.audit.value.set`](/peios/using-peios/events/lcs/lcs-audit-value-set.md)
- [`lpsd.account.created`](/peios/using-peios/events/lpsd/lpsd-account-created.md)
- [`lpsd.account.deleted`](/peios/using-peios/events/lpsd/lpsd-account-deleted.md)
- [`lpsd.account.modified`](/peios/using-peios/events/lpsd/lpsd-account-modified.md)
- [`lpsd.credential.changed`](/peios/using-peios/events/lpsd/lpsd-credential-changed.md)
- [`lpsd.credential.verified`](/peios/using-peios/events/lpsd/lpsd-credential-verified.md)
- [`lpsd.group.created`](/peios/using-peios/events/lpsd/lpsd-group-created.md)
- [`lpsd.group.deleted`](/peios/using-peios/events/lpsd/lpsd-group-deleted.md)
- [`lpsd.group.member.added`](/peios/using-peios/events/lpsd/lpsd-group-member-added.md)
- [`lpsd.group.member.removed`](/peios/using-peios/events/lpsd/lpsd-group-member-removed.md)
- [`peinit.config.reload.applied`](/peios/using-peios/events/peinit/peinit-config-reload-applied.md)
- [`peinit.graph.operation.ended`](/peios/using-peios/events/peinit/peinit-graph-operation-ended.md)
- [`peinit.job.ended`](/peios/using-peios/events/peinit/peinit-job-ended.md)
- [`peinit.operation.ended`](/peios/using-peios/events/peinit/peinit-operation-ended.md)
- [`peipkg.action.authorised`](/peios/using-peios/events/peipkg/peipkg-action-authorised.md)
- [`peipkg.claim.changed`](/peios/using-peios/events/peipkg/peipkg-claim-changed.md)
- [`peipkg.package.installed`](/peios/using-peios/events/peipkg/peipkg-package-installed.md)
- [`peipkg.package.uninstalled`](/peios/using-peios/events/peipkg/peipkg-package-uninstalled.md)
- [`peipkg.package.upgraded`](/peios/using-peios/events/peipkg/peipkg-package-upgraded.md)
- [`peipkg.repository.added`](/peios/using-peios/events/peipkg/peipkg-repository-added.md)
- [`peipkg.repository.refreshed`](/peios/using-peios/events/peipkg/peipkg-repository-refreshed.md)
- [`peipkg.repository.removed`](/peios/using-peios/events/peipkg/peipkg-repository-removed.md)
- [`peipkg.transaction.recovered`](/peios/using-peios/events/peipkg/peipkg-transaction-recovered.md)
- [`stratafs.file.copied-up`](/peios/using-peios/events/stratafs/stratafs-file-copied-up.md)

## B.29.17 <a id="outcome.verdict"></a>`outcome.verdict`

- **Type:** `str.enum`
- **Values:** `pass` · `reject` · `drop`
- **Set:** closed
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

The decision a policy engine reached, where the decision has more than two
states and `outcome.success` cannot express it. `reject` and `drop` both
refuse, and differ in whether the refusal is signalled back to the sender
or the traffic is discarded silently.

**Carried by:**

- [`ntfe.verdict.reported`](/peios/using-peios/events/ntfe/ntfe-verdict-reported.md)

## B.29.18 <a id="outcome.verdict-previous"></a>`outcome.verdict-previous`

- **Type:** `str.enum`
- **Values:** `pass` · `reject` · `drop`
- **Set:** closed
- **Asserted:** no
- **Carried in:** the payload
- **Defined in:** `kernel.evman`

The verdict a flow's cached judgment held before it was judged again. Set
beside `outcome.verdict`, the pair is what tells a reload that changed a
live connection's fate, such as `pass` to `drop`, from the far commoner
re-judgment that changed nothing.

**Carried by:**

No event carries this field yet.

*Generated from `kernel.evman` by `pkm/tools/gen-events-book.py`. Edit the fragment, not this page.*
