Skip to main content

How a Report Is Graded

The scorecard is computed once, when a report completes, from measurements the analyzer stores on the report and the readiness section of the test config the replay ran with.

Because the measurements are kept, a report can be re-graded without rerunning it: the test config editor previews a threshold change against recent reports, and an acceptance re-grades the report it was made from.

The verdict​

The verdict word sits at the top of the Readiness tab, in the Readiness column of the reports grid and on every column of the service trend.

VerdictMeaning
ReadyEvery family that blocks is at or above its floor letter and every grading step is done.
Not readyAt least one blocking family is below its floor. The summary names them, for example "Blocked by Regression at C (needs B)."
Still gradingThe replay is still running. The tab shows the grading steps (Replay, then Trend) instead of letters.
Not gradedThe report has no grade. The card says why: the replay ended in Error or Canceled, or the report was analyzed before readiness grading existed and needs a reanalysis.

Under the verdict word, the summary sentence says which report the Trend family compared with, for example "Compared with report 8f3c... of Oct 24, 2026 14:02 UTC." or "No previous graded report in the trend window to compare with."

A Ready report: every blocking family at or above its floor, with an advisory family below its floor listed under Worth knowing before you ship

A Not ready report lists "What gets this build to ready": one line per blocking family with its current letter, its floor and the measure it needs to reach.

Advisory families never appear there; the ones below their floor are listed under "Worth knowing before you ship".

Families and letters​

Ten metric families are graded, each with its own collector, measure and letter.

The grade ledger on the Readiness tab: each family with its letter, role, measure, threshold, how long the letter has held and its status

FamilyHeadline measureGrades n/a when
RegressionAssertion pass rateNo assertions ran in this replay.
PerformanceThe headline latency percentile against its goal, plus the error rateNo transactions were sent to the service, or there is no latency goal and no recorded p99.
ResilienceShare of faulted requests the service handled within the chaos boundsThe test config has no chaos rules, nothing was mocked, no rule fired, or no fault fell inside an inbound request.
Spec adherenceShare of replayed HTTP calls that conform to the service's OpenAPI documentNo spec is attached to the service, the spec could not be used, or no call could be checked.
SecurityWorst open severity among the static checks and the auth probeNo HTTP calls were replayed to scan.
Mock fidelityResponder match rateNothing was mocked in this replay.
CoverageShare of production call volume on the endpoints the replay exercisedProduction traffic was not looked up, could not be loaded, there is none in the window, or the replay sent no inbound calls.
Runtime healthRestarts, OOM kills and readiness waits on the system under testThe replay did not run in a Kubernetes cluster.
Data layerSQL statement match rate, or database mock match rateThe replay touched no database.
TrendHow many families fell since the previous graded reportNo previous graded report of the same service and build in the trend window.

A letter runs from A to F.

A family with nothing to grade on a report shows n/a: it is left out of the score and it never blocks, because a family with no input cannot fail a floor.

The exact sentence for each n/a case is on the family's page.

Roles and floors​

The test config gives every family a role.

RoleEffect on the verdictEffect on the score
Blocks below <floor>The report is Not ready when the family's letter is below the floor letter.Counted.
AdvisesNever moves the verdict.Counted.
OffNever moves the verdict.Left out. The family still shows a letter on the report.

The floor is the lowest letter that still passes for a blocking family.

Every family's floor defaults to B.

The Speedscale defaults block on Regression and Mock fidelity, advise on Performance, Runtime health, Data layer and Trend, and keep Spec adherence, Security, Coverage and Resilience off so that switching them on is a decision the team makes on the Readiness tab of the test config.

Letter boundaries​

Rate families earn the letter whose boundary the measure reaches; below the D boundary is F.

Performance works the other way: the boundary is the percent over the latency goal the measure may not exceed.

Runtime health, Trend and Security have fixed rungs that the config cannot move.

The defaults below are the grader's own.

A test config can override the rungs of any family in the first table; an override that sets one rung keeps the default for the others.

FamilyABCDDirection
Regression99.5%98%95%80%At least this pass rate
Performance0%0%10%25%At most this percent over the latency goal
Mock fidelity99%97%90%80%At least this match rate
Data layer99%97%90%80%At least this match rate
Spec adherence99%97%90%80%At least this conformance
Coverage95%85%70%50%At least this share of production calls
Resilience95%85%70%50%At least this share of faults handled

Performance also needs the headline percentile to be at most 5% over the previous graded report's for an A, and the error rate caps the letter: above 1% of transactions without a response the letter is at best C, above 5% at best D.

FamilyABCDF
Runtime healthNothing happenedReadiness waits onlyA restart, no OOM killAn OOM kill or crash loop the service recovered fromThe service never became ready
TrendNo family fellOne advisory family fellOne blocking family fell one letterMore than thatThree or more families fell, or a blocking family fell three letters
SecurityNo open findingsLow findings onlyNothing above mediumNothing above highA critical finding is open

The ledger on the Readiness tab shows each family's measured value and its threshold sentence, for example "99.7% pass" against "B at >= 98%".

For a blocking family the threshold names the floor; for the others it names the letter earned.

The weighted score​

The score is the weighted mean of the graded letters on a 4-point scale: A is 4, B is 3, C is 2, D is 1 and F is 0.

Families graded n/a and families whose role is Off are left out.

Every weight defaults to 1 and can be changed on the Readiness tab of the test config; a weight of 0 is read as the default, so Off is how a family leaves the score.

The score is rounded to two decimals and shown as "of 4".

When acceptances lifted a letter, the ledger also shows the score without acceptances.

Confidence​

Confidence says how much of production the replay vouches for.

It is the product of three factors and sits beside the score; it is never folded into a letter or the verdict.

FactorValue
Mock fidelityThe responder match rate as a factor, rounded to two places (72.4% matched is 0.72). 1 when nothing was mocked.
CoverageThe share of production call volume the replay exercised, with accepted findings applied. 1 when the Coverage family is n/a. This factor applies even when the Coverage family's role is Off.
Rerun agreement1 for a single run.

The Readiness tab prints the factors beside the value, for example "mock fidelity 0.99 x coverage 0.75 x rerun agreement 1", and says when coverage lowers confidence.

A replay whose mocks missed often, or that reached a tenth of production, vouches for less even when every letter is A.

Acceptances and the frozen verdict​

An acceptance takes a finding out of its family's measure.

The family is measured twice: as recorded, which is kept as the letter without acceptances, and with the accepted findings out, which is the letter the family gets.

A letter that rose this way is marked as lifted, and the accepted findings stay visible under Accepted on the family's detail.

An acceptance never moves a graded report's verdict on its own.

Re-grading an already graded report keeps the verdict it had, and the Readiness tab says why: "The verdict does not move: an acceptance never changes a graded report's verdict, so it stays Not ready until the next replay grades with the acceptance in effect."

The next replay grades afresh with the acceptance in effect, so an accepted blocker makes that replay Ready.

A threshold change in the test config applies to replays started after you save.

Past reports keep the grades they were given; the preview on the Readiness tab shows what they would earn under the draft without writing anything.

Letters held since​

Each ledger row says how long the family has held its letter.

A letter equal to the previous graded report's keeps that report's "since", so a family that has been at B for ten replays says so; a letter that changed starts at this report.