Skip to content

Add PRML predicate: pre-registered evaluation criteria - #587

Open
sk8ordie84 wants to merge 2 commits into
in-toto:mainfrom
sk8ordie84:prml-predicate
Open

Add PRML predicate: pre-registered evaluation criteria#587
sk8ordie84 wants to merge 2 commits into
in-toto:mainfrom
sk8ordie84:prml-predicate

Conversation

@sk8ordie84

Copy link
Copy Markdown

Per the new predicate guidelines, this PR proposes a predicate for the pre-registered success criteria of an AI/ML evaluation — the bar (metric, comparator, threshold, dataset content hash, seed, claimant) committed to a SHA-256 digest before the evaluation is run.

Answers to the preliminary questions:

Use case. An eval team (or a vendor under a contractual pre-registration clause) locks the pass/fail criteria of an upcoming evaluation, attests the lock, then runs the evaluation and attests the results separately (e.g. with Test Result). A policy consuming both can verify the bar predates the result and that the run's dataset/seed/threshold match the pre-committed ones. This is the evaluation analogue of pre-registration in empirical science, and it maps to requirements now appearing in AI procurement and EU AI Act documentation contexts.

Why existing predicates don't cover it. Every evaluation-shaped predicate in the directory attests after a run: Test Result records outcomes plus the configuration as reported at result time; SVR records a policy verdict; SCAI records observed attributes. A configuration reported together with a result can have been chosen after seeing the result — no result-time attestation can certify its own criteria were fixed in advance. This predicate is produced at a different point in the supply chain (before execution), which is exactly the property policies need to check. It is complementary to Test Result, not overlapping.

Concrete example. The Example section contains a full Statement generated by the PRML reference implementation from a valid manifest (it round-trips through the validator). The predicate schema is small (9 fields) and deliberately mirrors the PRML v0.1 manifest byte-for-byte, so the manifest_sha256 binding stays recomputable — the one deviation from the lowerCamelCase convention, called out in Parsing Rules.

Policy questions it answers. "Reject any evaluation claim whose criteria were not attested before the run"; "reject any result whose dataset hash or seed drifted from the pre-committed manifest"; "treat a digest mismatch as unsupported".

The Type URI is under our own namespace (https://falsify.dev/prml/v0.1), following the CycloneDX/SPDX precedent, so no in-toto.io redirect entry is needed. PRML is openly specified (CC BY 4.0) with test vectors and independent implementations (Python/JS/Go/Rust). Happy to add a protobuf definition if the maintainers would like language bindings, and to adjust anything in review.

Adds a predicate type for the success criteria of an AI/ML evaluation,
locked (SHA-256 over a canonical serialisation) before the evaluation is
run. Complements the Test Result predicate: Test Result attests what a
run produced; this predicate attests that the pass/fail bar existed and
was fixed before the run, which is the one property a result-time
attestation cannot certify about itself.

The example statement is generated by the PRML reference implementation
and round-trips through its validator.

Signed-off-by: Cüneyt Öztürk <cuneytozturk84@gmail.com>
PRML v0.1 erratum (2026-08-23) closed a defect where a manifest with
threshold .inf locked and verified cleanly while asserting nothing: every
observation satisfies <= .inf, and no observation satisfies any comparison
against .nan. The specification now prohibits the IEEE 754 special values,
and the predicate's field list should say so — the other fields carry their
type constraints here, and a reader implementing validation from this
document alone would otherwise accept a bar no result can fail.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant