Writes

The durable audit of every mutation attempted through write access — commits, validation failures, and refusals alike. Under Observe → Writes.

What a row shows

The log stores one row per field; the page shows one row per write, with the record name linked. Open a row for the per-field from/to detail (values as of commit time), the refusal reason, and the error text.

Column
Outcomecommitted, refused, or failed_validation
Confirmationconfirmed — a preview was issued and approved · unattended — the domain allowed saving without one
Entity / DomainWhich contract the write resolved through, at which version
SurfaceThe tool that made the call
On behalf ofThe calling user. Writes run as them, never as the package

Two charts cover the selected timeframe with every day on the axis: write requests per day stacked by outcome, and the daily success rate. They read exact aggregates, so they stay truthful past the table’s row cap.

Reading a refusal

A refusal is signal, not noise — it usually means an agent, an instruction, or the writable set needs adjusting. The reason code names which rule said no:

ReasonMeans
global · domain · entity · fieldThe chain narrowed it at that level
validationA Salesforce validation rule rejected the values
confirmation_missingA commit arrived with no preview behind it
confirmation_staleThe record changed after the agent proposed the edit, so the approval no longer matched it

The last two mean confirmation did its job. confirmation_stale is usually somebody else editing the record between the agent’s proposal and its commit.

What it is for

Nothing here expires — this is the opposite of Debug Logs, which is time-boxed and self-clearing. An unattended row is the audit answer for an autonomous write: what makes it defensible is not that a person approved it, but that an admin turned it on deliberately and every row says so.

Old and new values are record data, so the page is admin-only.

What’s next