# Review deliveries

Read the Message log: what was sent, to whom, and why a delivery failed.

Outcome: you know whether a message reached its recipient and, if not, why. Reader: the maintainer of the Daily Digest or of any flow that writes Message. Prerequisite: read access to Communication - Pedro.

A Message row records a delivery attempt. It does not tell you whether the person answered; KPI answers are Observations in KPIs & OKRs, and the digest's own response tracking lives there.

## Read the delivery log

1. Open **Data** → **Message** → **Grid view**. The view has no sort; sort by **Created** temporarily to see the newest rows, then remove the sort.
2. For each row, read **Status**, **Sent At**, **Channel (Name)**, **Rule (Name)** and **Recipients (Membership)**.
3. Check **External Message Id**. A Slack timestamp such as `1726597800.000200` means Slack accepted the message. A value starting with `dry-run-` means the run was simulated: Status says Sent, but nothing reached Slack.
4. Read **About Keys** for the occurrences the message asked about, one `recordId:date` per line.

[![Message Grid view: Daily Digest deliveries, Sent and Failed.](/systems/communication/screens/comm-message-grid.png)](/systems/communication/screens/comm-message-grid.png)

Success: every real delivery of the day has Status Sent, a Slack timestamp and a recipient membership.

## Investigate a failure

1. Use the grid's search for `Failed`, or for an error text such as `Person not found`.
2. Open the row and read **Failure Reason** and **Recipients (Membership)**.

[![A failed delivery: the recipient was not resolved in Tooling and Access.](/systems/communication/screens/comm-message-failed-record.png)](/systems/communication/screens/comm-message-failed-record.png)

| Failure Reason | What it means |
| --- | --- |
| `Person not found in Tooling mirror: rec…` | The digest could not resolve the recipient's Slack account in Tooling and Access. No recipient is linked and nothing was sent. |
| `invalid_arguments` | Slack refused the post. On 2026-10-26 this followed a `user_not_found` from opening the DM; the post was attempted anyway. |
| `[object Object]` | An early error the flow could not serialize (September 2026). |

3. Fix the cause at its owner: the person's [Identity Binding](/systems/tooling/entity-identity-binding) and [Tool Account](/systems/tooling/entity-tool-account) in Tooling and Access, or the membership in Core. See [Troubleshooting](/systems/communication/troubleshooting).

## Recover

Do not edit a Sent or Failed row to make it look delivered. No flow resends a Failed row. Whether the next run asks again depends on whether the item is still due that day; see the KPIs & OKRs [Daily Digest](/automations/daily-digest). Report repeated failures to the Daily Digest maintainer with the row's Created time, Failure Reason and the record id shown in it.

## Read the totals with care

**Channel → Last Sent** and **Notification Rule → Messages Sent** count every row with Status Sent, dry runs included. On 2026-10-28, 76 of the 155 Sent rows were dry runs. Count real deliveries by excluding External Message Id values that start with `dry-run-`.

## Next steps

[Message](/systems/communication/entity-message) · [Daily Digest delivery](/automations/daily-digest) · [Troubleshooting](/systems/communication/troubleshooting)