Skip to main content

Report

Struct Report 

Source
pub struct Report {
Show 13 fields pub schema_version: u32, pub status: Status, pub harness: String, pub api_schema: String, pub final_message: Option<String>, pub structured_output: Option<Value>, pub turns: u32, pub tool_calls: Vec<ToolCallRecord>, pub usage: Usage, pub context_usage: Usage, pub session_id: String, pub stop_reason: Option<String>, pub error: Option<String>,
}
Expand description

The single JSON document locode-exec prints to stdout (ADR-0009).

schema_version is frozen at 1; changing the envelope shape is a deliberate, versioned change (see the golden test).

Fields§

§schema_version: u32

Envelope schema version. Always 1 for this contract.

§status: Status

The terminal state of the run.

§harness: String

The harness pack the run used (e.g. grok).

§api_schema: String

The wire schema the run used (e.g. anthropic) — the provider’s api_schema(). Names the request/response protocol shape, not a gateway/endpoint.

§final_message: Option<String>

The assistant’s final text message, if the run completed with one.

§structured_output: Option<Value>

A schema-constrained task answer, if one was requested (--json-schema).

§turns: u32

How many sample→dispatch→append turns the loop ran.

§tool_calls: Vec<ToolCallRecord>

A record of every tool call made during the run.

§usage: Usage

Token accounting for the run: summed over every turn. This is the cost basis — what the run generated in total — and grows without bound as a run takes more turns.

§context_usage: Usage

Token accounting for the run’s final turn only — the context occupancy the next request starts from.

Not derivable from Report::usage: each turn’s request re-sends the whole conversation, so a per-turn sum counts the same history once per turn and has no relationship to the context window. The last turn’s request is the whole conversation, which is why this one number answers “how full is the context?”.

Additive field (ADR-0018’s envelope-evolution policy: new optional report fields are non-breaking and do not bump schema_version); absent in traces written before 2026-07-25, where it reads as all-zero.

§session_id: String

The session identifier.

§stop_reason: Option<String>

The final model stop reason ("end_turn", "max_tokens", …), when a completion was received (ADR-0009 amendment 2026-07-19): lets an eval pipeline distinguish “model finished” from “model got truncated” without re-reading the trace.

§error: Option<String>

A fatal error message, if the run ended in status == error/model_error.

Trait Implementations§

Source§

impl Clone for Report

Source§

fn clone(&self) -> Report

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Report

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Report

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Report

Source§

fn eq(&self, other: &Report) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for Report

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Report

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.