Download the signed record (po1qEN54ReZWLwQmIakuqQ.json), then check its Ed25519 signature against the key Graft publishes at /.well-known/graft-record-key. This works today with Node.js 22 or later and nothing to install:
node --input-type=module -e '
import { readFileSync } from "node:fs";
const e = JSON.parse(readFileSync("po1qEN54ReZWLwQmIakuqQ.json", "utf8"));
const { keys } = await (await fetch(
"https://graftfork.com/.well-known/graft-record-key")).json();
const k = keys.find((x) => x.id === e.key);
const b64 = (s) => Buffer.from(s, "base64");
const pub = await crypto.subtle.importKey("raw", b64(k.public),
"Ed25519", false, ["verify"]);
const ok = await crypto.subtle.verify("Ed25519", pub,
b64(e.signature), new TextEncoder().encode(e.payload));
const r = JSON.parse(e.payload);
const b = r.behaviour;
console.log(ok ? "Valid (key " + k.id + "): " + r.run + ", " + r.outcome
+ ", suite " + r.suite.passed + "/" + r.suite.total + ", "
+ b.unexplained + " unexplained of " + b.requests : "NOT valid");'
What it printed for this record (one line, wrapped here):
Valid (key 4f153e80bf9364d7): po1qEN54ReZWLwQmIakuqQ, passed,
suite 215/215, 0 unexplained of 1892
Change one character of the payload and it prints NOT valid. The record's own fields are the JSON text in payload.
Graft's command line does this in one step: graft verify-record po1qEN54ReZWLwQmIakuqQ.json, or, for a rebuild of your own, by its id with GRAFT_TOKEN set (a draft's record is its owner's alone, so use the file for this one). That needs graftfork 0.3.1 or later (npm install -g graftfork). What graftfork 0.3.0 prints for this record:
Valid: signed by graftfork.com (key 4f153e80bf9364d7).
Draft rebuild po1qEN54ReZWLwQmIakuqQ of branch lab/heat-78,
kept: github.com/craigm26/graft-lab
examples/heat-engine/heat.duramen to
examples/heat-engine/regen/impl/t06-ts (heat-engine 1.5.0-slice),
suite 215/215, 2 build(s). Against rebuild q-4zFdlqCU-lLzTaaEy2fg:
1892 requests, 6 part(s) of the answer changed, 0 change(s) the
record didn't ask for. Started by an agent (token tok_mc-qDIxvjkj5).
One line, wrapped to fit. graftfork 0.3.1 and later say "passed (a draft ...)" for it: a draft never becomes the spec's kept build. 0.3.0 said "kept". More on signed records: Check the signed record.