Anyone can claim
this one you can check

Every model MatrixAI builds carries a receipt, a manifest and a package that reproduces. Somebody else — an auditor, a reviewer, a customer — can re-run the check without asking you for anything and without believing you.

PASSFAILINCOMPARABLENOT_RUN
Read this first

This page is about what can be proved about a model — where it came from, with what data, what was measured and over what — and about nothing else. It does not say a model is good. The last block on this page lists what none of this demonstrates, and it is not small print: it is half the argument.

Where this lives

Inside the Studio it is the Audit phase (or the Verification view in the Workbench). From a terminal it is matrixai verify, matrixai attest, matrixai report --tripod and matrixai bom. And with nothing installed at all, it is the three cases at /casos, already run, with their literal output.

01The problem

A number nobody can re-check is an opinion

A model ships as a file and a figure: «94% accuracy». Everything that decides whether that figure means anything — which data, which split, which seed, which library version, whether the weights that travel are the ones that were trained — stays behind, in a notebook, in somebody's head, or nowhere.

That is fine until someone has to answer for it: an audit, a regulator, a customer asking how the model that decides about them was built. Then the figure is worth what the person saying it is worth.

MatrixAI does not solve this by promising more. It solves it by writing down what happened, tying it to digests, and shipping a checker that anybody can run — including one that says, out loud, what it could not check.
02The receipt

What a receipt is, and what it is for

A receipt is a small JSON document that records one thing that happened: this model, over this data, produced this number, here and now. It carries the digests (sha256) of the model and of the data, the environment it ran in, the metric with its direction and its tolerance, and — always — a line saying what it does not attest.

  • It is emitted when something runs: a pipeline, an evaluation. A simulation emits none, and says why — paper that describes nothing reads as proof that something happened.
  • It can be signed, and signing is a separate act: whoever signs decides with which key. An unsigned receipt is level A0 and says so.
  • Whoever receives it can compare two receipts of the same model and read the difference without opening a terminal.
A receipt in the Studio: what was measured, the model and data digests, the level and what it does not attest
A real receipt, for a model MatrixAI did not train. The measurement, the two digests, the level — and the receipt's own words about what it does not attest.
03Assurance

A0 to A4: what a receipt actually holds up

A level anybody can write for themselves means nothing, so the level is deduced from what the receipt carries — the assurance_level written inside the document is ignored on purpose.

LevelWhat it holds up
A0Unsigned. Structured and readable, but it does not prove whose it is: anyone can write one just like it.
A1Signed. It has not been altered between whoever issued it and whoever reads it.
A2Signed and with reproducible evidence: the recipe and the dataset digest travel, so the result can be rebuilt.
A3–A4Reserved for attested runtime environments and proofs this route does not give today. They are not claimed.
A better signature does not raise the level. Sigstore signs with a verifiable identity and answers «whose is this», which HMAC cannot — and it still leaves the level where it was. The levels talk about what was checked, not about how strong the signature is. If signing better raised the level, A2 would stop meaning «there is reproducible evidence».
04Verification

Four stages, and one of them is «I could not check this»

matrixai verify rebuilds the package and reports four stages separately. Each one has its own verdict, and there are four possible verdicts — not two:

PASSFAILINCOMPARABLENOT_RUN
StageWhat it checks
manifestEvery artifact in the package matches the sha256 the manifest declares — and nothing travels that the manifest does not name.
R1The dataset rebuilt from the recipe has the full sha256 the package declares.
trainingTraining runs to completion with what the package carries inside.
R3The metrics of that fresh run fall inside their declared tolerance.

The interesting verdict is INCOMPARABLE. A package trained on data that cannot be rebuilt is an honest, common case — calling it FAIL would accuse it of being tampered with. So the report says «I could not compare this, and here is why», and the exit code lets a script tell the three cases apart without reading the JSON.

The Audit phase: the six deterministic checks the core re-runs on every change to the IR
Not the same thing, and worth telling apart: these six checks are DETERMINISTIC and re-run on every change to the model — parser, verifier, safety, typecheck, compiler, backend contract. They say the model is well formed. The four stages below say the package holds up.
The package verification with its four stages, led by what was not checked
The package verification, asked for on demand — rebuilding the package costs. It opens with «NOT everything was checked», before any verdict, and lists the stages nobody ran as such.
The panel leads with what was not checked, before any green tick. A report that opens with «nothing failed» invites you to read four passes where there were two passes and two things nobody looked at.
05Against what

The manifest: what would be checked, and with which numbers

Every package carries a reproduce.json: the seeds (data, split, weight initialisation), the three epoch counts —declared, effective, actually run—, the artifacts with their digests, and the metrics with the dataset digest they were measured on.

  • Three epoch numbers, not one. What the contract asked for, what the cap left, and what actually ran are three different questions, and a package that answers only the first is hiding the other two.
  • A metric without its dataset digest is unusable. «94%» over which rows? The manifest says which, and almost nobody publishes that.
  • What is missing is listed. Not blank, not filled in: named, so you know what to ask whoever made the package for.
The four stages with their reasons, and Inside the package with seeds, epochs and artifact digests
The four stages with the reason for each one, and below «Inside the package»: seeds, the three epoch counts, and every artifact with its sha256.
06Foreign models

Measuring a model MatrixAI did not train

You can bring an ONNX model from anywhere — PyTorch, TensorFlow, scikit-learn, a vendor — plus an evaluation CSV. It runs, it is measured, and the number is tied to the digests of both files in a receipt somebody else can re-check.

matrixai attest model.onnx --data eval.csv --target-column y \
  --key <hex> --in-toto

What that is worth, and what it is not:

  • You can compare vendors on the same data. Two receipts, same CSV digest, two numbers — and nobody has to trust anybody's slide deck.
  • The measurement is pinned. Change one row of the CSV and the digest changes: a receipt cannot be quietly reused for other data.
  • It tops out at A1, and the screen says so before you upload anything. Higher levels speak about runtime environments and proofs this route does not give.
ONNX only, and that is a decision. Running somebody else's code would widen the attack surface of a product whose entire argument is trust. A model declaring integer inputs is not fed a decimal either: ONNX Runtime would truncate it silently, and that number would end up in a signed receipt.
Bring a model MatrixAI did not train: the form, with what the receipt attests and what it does not
Before uploading anything, the screen states what one of these receipts attests, what it does NOT, and where the assurance tops out.
07TRIPOD+AI

The clinical checklist, filled in from what the run recorded

TRIPOD+AI (BMJ, 2024) is the 27-item checklist required to publish a study that develops or validates a clinical prediction model. The measured reality is that most papers still do not meet it: it gets filled in by hand, at the end, from memory.

matrixai report <package> --tripod --locale en -o record.md

The command invents nothing. It writes what the run already recorded, in the format that audience has to hand in — and it names the boxes it cannot fill.

What TRIPOD+AI asks forWhere it comes from
Data source and sample sizethe data recipe and artifacts.dataset.rows — and with a recipe, the source is declared synthetic, written as such
Predictors and excluded columnsfield_types, field_ranges, excluded_identifiers
Split and randomisationthe three seeds and the contract's SPLIT
Modelling method and hyperparametersthe .mxai and the .mxtrain, both readable, both travelling in the package
Environment and versionspython, platform, packages, backend and device
Performance metricswith the dataset digest they were measured on
Model availabilitythe package: ONNX + predict.py, usable with no MatrixAI installed
Missing data · Calibration · Subgroup fairnessNot computed today — and the record says so, one box at a time
Funding · Conflicts · Ethical approval · Intended useA person writes these. The report asks for them; it does not invent them
A record with explained gaps is useful. One with silent gaps is worse than none: it reads as if there were nothing to say.
08Interoperability

Not a private format

A receipt only a MatrixAI can read is a receipt worth nothing outside MatrixAI. So the same content also travels in the envelopes the rest of the world already reads:

StandardWhat it gives you
DSSEthe signature envelope, with the payload in base64 as the spec requires
in-totothe same receipt as a Statement, with its subjects and their digests — matrixai attest --in-toto
CycloneDX 1.6 ML-BOMthe package's bill of materials, validated against the official schema and deterministic: its serial number comes from the manifest digest, not from a random one — matrixai bom
Sigstorekeyless signing with a verifiable identity — matrixai attest --sigstore
Both envelopes are emitted, and each says which it is: the native one is not withdrawn. And --sigstore never falls back to HMAC in silence — if the library or the identity is missing it says which, and writes no receipt. Falling back to another signature would assume you do not care who answers for the document.
Not quality
That the model is any good
A receipt says what came out of measuring it this way, over this data. Whether that is good enough for your problem is a judgement, and it is yours.
Not authorship
That the model is yours
Attesting a foreign model attests the evaluation, the environment and the inputs. A model copied from somewhere else produces exactly the same receipt as your own.
Not policy
Who is worth trusting
A signature says who signed. Whether that signer should be believed is a trust policy, and this product does not decide it for you.
Not approval
Clinical or regulatory validity
A TRIPOD+AI record is not a medical device, an approval, or a substitute for whoever signs the study. The record itself says so on its first line.
See the three cases →What this is for: the EU AI ActGet the Studio