Skip to content
Tracon

StatePreflightReport

Namespace Tracon · Assembly Tracon.Core.dll

What a read-only state preflight found: how many rows carry each stored schema generation, and how a small sample of them behaved when this build tried to read them.

public sealed record StatePreflightReport : IEquatable<StatePreflightReport>

objectStatePreflightReport

IEquatable<StatePreflightReport>

object.GetType(), object.ToString(), object.Equals(object?), object.Equals(object?, object?), object.ReferenceEquals(object?, object?), object.GetHashCode()

A sample is evidence, not proof. A report with no failures says the rows that WERE read came back readable — it never says every row is readable. StatePreflightReport.SamplePerGeneration is part of the report for exactly that reason: a reader who cannot see how much was checked cannot judge what the absence of failures is worth.

The generation counts, by contrast, ARE complete: they come from an aggregate over the whole table, so StatePreflightReport.HasUnreadableGeneration covers every stored row.

public StatePreflightReport()

The workflow checkpoint rows, grouped the same way.

public required IReadOnlyList<StateGenerationCount> Checkpoints { get; init; }

IReadOnlyList<StateGenerationCount>

The number of sampled sessions this build genuinely deserialized through Microsoft Agent Framework.

public required int DecodedSampleCount { get; init; }

int

Whether any stored row carries a generation newer than this build understands.

public bool HasUnreadableGeneration { get; }

bool

Whether nothing was found that would block this build from reading the stored state.

public bool IsClean { get; }

bool

The persistence provider the report was read from, for example PostgreSQL.

public required string ProviderName { get; init; }

string

The Microsoft Agent Framework version this process runs.

public required string RunningMafVersion { get; init; }

string

The number of sampled rows that failed. The length of StatePreflightReport.SampleFailures.

public int SampleFailureCount { get; }

int

Derived rather than stored: a count kept beside the list it counts drifts away from it the first time one of the two is updated alone.

The sampled rows this build could not read, with the reason for each.

public required IReadOnlyList<StateSampleFailure> SampleFailures { get; init; }

IReadOnlyList<StateSampleFailure>

How many rows of each generation were sampled, at most.

public required int SamplePerGeneration { get; init; }

int

The total number of rows sampled, however deeply each was checked.

public int SampledCount { get; }

int

The session rows, grouped by the generation they were written with.

public required IReadOnlyList<StateGenerationCount> Sessions { get; init; }

IReadOnlyList<StateGenerationCount>

The number of sampled rows whose payload was only checked for structure, not decoded.

public required int StructureOnlySampleCount { get; init; }

int

Two rows land here. A workflow checkpoint has no decoder outside a running workflow, so only its stored shape can be checked. A session whose state is encrypted at rest cannot be decoded by a process that holds no content protection key — which a preflight run from the CLI normally does not. Neither is a failure, and neither is proof of readability.

How many stored rows carry a generation newer than this build understands.

public long UnreadableRecordCount { get; }

long

public override bool Equals(object? obj)

obj object?

bool

public bool Equals(StatePreflightReport? other)

other StatePreflightReport?

bool

public override int GetHashCode()

int

public override string ToString()

string

operator ==(StatePreflightReport?, StatePreflightReport?)

Section titled “ operator ==(StatePreflightReport?, StatePreflightReport?)”
public static bool operator ==(StatePreflightReport? left, StatePreflightReport? right)

left StatePreflightReport?

right StatePreflightReport?

bool

operator !=(StatePreflightReport?, StatePreflightReport?)

Section titled “ operator !=(StatePreflightReport?, StatePreflightReport?)”
public static bool operator !=(StatePreflightReport? left, StatePreflightReport? right)

left StatePreflightReport?

right StatePreflightReport?

bool