Skip to content

Traces

Follow one task from the message that started it to the verdict that billed it: every Action records who did it, for whom, how and on what.

A trace is every Action one Task took, in order. Each Action records by, for, via, on and thing, so the trace is a query, not a log someone has to keep.

What each Action records

FieldHoldsExample
byThe Worker that actedHarbor Residential's agent
forThe Party it acted forHarbor Residential
viaThe channel or Interfaceemail
thingThe record it acted onThe lease for unit 5C
status and reasonWhere it standsdone, or pending with awaitingAction

An Evaluator's verdict, an Approval's answer and every model call sit beside the Action they belong to.

Read a trace

The builder lists one customer's Actions for a day on api.sb:

TypeScript
import { $ } from 'startup-builder'

const actions = await $.Action.list({ where: "for = 'cus_BNY3PShL26' and createdAt >= '2026-10-06'" })

The Customer reads its own trace in its Portal, or from api.leaseline.app with its own key. It sees its Tenant's Actions only.

Why traces matter here

A Customer disputes a notice: "your agent offered a concession nobody here set". The trace shows the draft, the price Approval, who approved it and when. The question ends in one read.

A failed Evaluator verdict in a trace becomes an eval case. Add it before the fix, so the next Version proves it.