---
title: "Checking a rating document"
description: "How a reader checks that a TrackForge Rating Report is genuine, unaltered and still current: the signed rating statement, the Bitcoin timestamp, the public hash-only log, the proof pack's fingerprint, the rule book's hash, the free checker, and what no check can tell you."
image: "https://trackforge.studio/docs/img/trackforge-social-card.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://trackforge.studio/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Checking a rating document

:::note[No rating has been issued yet]
Rule book v2.4 is published and its hash is timestamped on Bitcoin, which you can check today from the [method statement](/docs/certification/rating/method-statement#the-rule-book). No rating under it has been issued yet. TrackForge's public record of ratings (the signing key, the log and the checker described below) and the check page's status lookup arrive with the first one.
:::

A Rating Report should not ask to be taken on trust. Everything on this page can be checked by the reader, with free tools, without asking TrackForge anything and without sending the document anywhere.

## What a check tells you, and what it cannot

A check answers three questions about a document: is it **genuine** (issued by TrackForge), is it **unaltered** (the same bytes that were issued), and is it **still current** (not replaced or withdrawn). It also proves **when** the rating existed.

No check can tell you that the society records the rating describes are right. A rating proves what the evidence showed under the rule book on its date, not that the evidence is true. For that, the Rating Report lists the largest works and where to look each one up at the societies, so a reader can spot-check them.

## What comes with a rating

| Item | What it is |
|---|---|
| Rating Report (PDF) | The document: the letter with everything behind it, written for the outside reader (a buyer, lender or adviser) |
| Condition schedule (spreadsheet) | One row per work |
| Proof pack (ZIP) | The frozen record the rating was computed from, with the signed rating statement and its timestamp proof |

The owner receives all three and may share them with prospective buyers, lenders and their advisers.

## The rating statement

A document cannot carry the Bitcoin proof of itself, so what TrackForge signs and timestamps is a small separate file, the **rating statement**, and the Rating Report quotes it. The statement holds:

- the rating's id, a reference to the catalogue (never its name), and the issue number (1 for the catalogue's first rating, then 2, 3 and so on);
- the issue date and the review date;
- the letter, and the hash of the full rating (the letter with everything that decides it);
- the rule book's version and hash;
- the hash of the frozen proof pack;
- the hash of the catalogue's previous statement, if there is one;
- the fingerprint of the key that signed it.

It carries no client name, work list, share or money figure. The format is published in the public record.

## How a rating is issued

A rating passes through three stages, and each is refused unless its conditions are met:

| Stage | What happens | Refused unless |
|---|---|---|
| Rated | The survey is computed and stored as a draft | Nothing further: a draft is not a rating anyone may rely on |
| Issued | The proof pack is frozen and stored, the statement is signed and sent for timestamping, and the rating is recorded as issued | The rule book is published and its hash confirmed on Bitcoin; every estimated input carries its basis and range; the rating is recomputed from its stored record in an isolated check and gives the same result |
| Released | The Rating Report and schedule are produced and handed over | The statement's timestamp is confirmed on Bitcoin, and the release checks pass |

So a released Rating Report always has a confirmed timestamp behind it.

## The checks

### Who issued it: the signature

The statement is signed by James Nash, TrackForge's rating signatory, with an Ed25519 key. The public half of the key is published in the public record and on the check page, and its fingerprint is printed on the Rating Report's summary page. A signature check confirms the statement was signed by that key, and that the key was in service on the issue date. A key leaves service only by a published, signed rotation record naming its successor, so the chain of keys can be followed from the first.

### When it was issued: the timestamp

The signed statement is timestamped with OpenTimestamps, which commits its fingerprint to a Bitcoin block. The proof sits beside the statement in the proof pack, and the free OpenTimestamps client checks it:

```
ots verify rating-<id>.signed.json.ots
```

A confirmed timestamp shows that the signed statement existed, unchanged, by the time of that block. It is also what keeps a signature usable if a key is later compromised: a statement whose timestamp shows it was signed before the compromise can still be relied on, and one signed by that key afterwards is refused.

### Whether it is still current: the log

TrackForge keeps a public log of every rating statement issued, replaced or withdrawn. The log holds hashes and dates only: no catalogue, client, letter or figure. Every change adds a line; no line is ever edited or removed, and each line names the hash of the one before it, so changing any line breaks every line after it. The head of the log is timestamped on Bitcoin after each addition.

A statement's status is one of:

| Status | Means |
|---|---|
| Current | Issued, and not replaced or withdrawn |
| Replaced | A later rating of the catalogue has replaced it; the check names the replacement |
| Withdrawn | TrackForge has withdrawn it |
| Past review date | Its review date, normally six months after issue, has passed. The rating is a statement about its date, so it never expires; past its review date it is simply older than a current reading would be |

The check page reports the status from the code printed on the report, and the QR code on any copy, however old, leads to the current status. See [replacement and withdrawal](/docs/certification/rating/re-rating#replacement-and-withdrawal).

### That your copy is the one issued: the fingerprints

The statement names the hash of the proof pack. To check a proof pack, work out its SHA-256 fingerprint and compare it with the statement's. The [check page](https://trackforge.studio/verify) does this in your browser without uploading the file; `shasum -a 256 <file>` on a Mac or `sha256sum <file>` on Linux does the same.

### Which rules it was made under: the rule book

The statement names the rule book's version and hash. Compare them with the version and hash in the [method statement](/docs/certification/rating/method-statement#the-rule-book), whose Bitcoin timestamp shows the rule book existed, unchanged, before the first rating under it. A rating cannot be issued under a rule book that is not published and confirmed on Bitcoin.

## The checker

The public record includes a small free checker that runs all three checks at once on the signed statement:

```
python checker/check_rating.py statement rating-<id>.signed.json --keys keys --log log/entries.jsonl
```

It confirms the signature and the key, the statement's place and status in the log and the log's chain, and that the timestamp proof is for this exact file (with the OpenTimestamps client installed, that Bitcoin confirms it). It does nothing else. Its exit status is 0 when the statement is genuine, current and fully checked; 1 when a check failed; 3 when nothing failed but something could not be checked; and 4 when it is genuine but replaced or withdrawn.

## What stays private

The rule book itself, the scoring code and the reference model are not published; the rule book is published by its hash. A party relying on a rating who needs it recomputed can have that done under a separate agreement. A rating is private by default: the log holds hashes only, and the check page answers only to the code printed on a document.

Source: https://trackforge.studio/docs/certification/rating/checking-a-rating/index.mdx
