async function verifyArtifact(url: string, expected: string) {
const res = await fetch(url);
if (!res.ok) return { state: "unavailable" as const };
const bytes = await res.arrayBuffer();
const digest = await crypto.subtle.digest("SHA-256", bytes);
const actual = "0x" + Array.from(new Uint8Array(digest), b => b.toString(16).padStart(2, "0")).join("");
return actual.toLowerCase() === expected.toLowerCase()
? { state: "verified" as const, actual }
: { state: "mismatch" as const, actual };
}