pythia-paths / app.js
yu
Release Pythia Paths v0.1
08aa093
Raw
History Blame Contribute Delete
31.1 kB
"use strict";
const EVIDENCE_URL = "dataset/data/evidence.jsonl";
const CONTEXT_URL = "dataset/data/published-piqa-context.jsonl";
const RELEASE_LOCK_URL = "dataset/release-lock.json";
const EXPECTED_EVIDENCE_SHA256 = "05b40085981b4c31dc49b15817fffc2192b782cc8d82bc75f8f33bd0c4349b26";
const EXPECTED_CONTEXT_SHA256 = "f3bb8583e6983096d2b078ed567864bac4a539da627b953bd6370d9a081bd7fc";
const EXPECTED_RELEASE_LOCK_SHA256 = "1101f5c9f8e8f3559e84d69e5b2208c433a9abc2e80582f7b14108e22f434a02";
const EXPECTED_EVIDENCE_SCHEMA = "pythia-paths/trajectory-evidence/0.2";
const EXPECTED_CONTEXT_SCHEMA = "pythia-paths/published-piqa-context/0.1";
const EXPECTED_LOCK_SCHEMA = "pythia-paths/release-lock/0.2";
const EXPECTED_REPO = "EleutherAI/pythia-70m-deduped";
const PINNED_EVAL_COMMIT = "a19eecb807ec2c79a39ebf18108816e6ffffc1d5";
const TOKEN_SOURCE_COMMIT = "e93a9faa9c77e5d09219f6c868bfc7a1bd65593c";
const DETAILED_STEPS = [0, 1000, 73000, 143000];
const CONTEXT_STEPS = [
0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1000, 3000,
13000, 23000, 33000, 43000, 53000, 63000, 73000, 83000,
93000, 103000, 113000, 123000, 133000, 143000
];
const COMMIT_PATTERN = /^[0-9a-f]{40}$/;
const SHA256_PATTERN = /^[0-9a-f]{64}$/;
const SOURCE_PATH_PATTERN = /^evals\/pythia-v1\/pythia-70m-deduped\/zero-shot\/70m-deduped_step[0-9]+\.json$/;
const SVG_NS = "http://www.w3.org/2000/svg";
const view = document.querySelector("#evidence-view");
const failure = document.querySelector("#load-failure");
const failureMessage = document.querySelector("#load-failure-message");
const chart = document.querySelector("#trajectory-chart");
const observationRow = document.querySelector("#observation-row");
const contextTableBody = document.querySelector("#context-table-body");
const snapshotStatus = document.querySelector("#snapshot-status");
const emptyInspection = document.querySelector("#inspection-empty");
const inspectionDetail = document.querySelector("#inspection-detail");
let evidence = [];
let reportContext = [];
function assert(condition, message) {
if (!condition) throw new Error(message);
}
function assertSame(actual, expected, label) {
assert(Object.is(actual, expected), `${label} does not match the reviewed release lock.`);
}
async function sha256Hex(buffer) {
const digest = await crypto.subtle.digest("SHA-256", buffer);
return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("");
}
function parseJsonLines(buffer, label) {
const decoded = new TextDecoder("utf-8", { fatal: true }).decode(buffer).trim();
assert(decoded.length > 0, `${label} is empty.`);
return decoded.split("\n").map((line) => JSON.parse(line));
}
async function fetchReviewedFile(url, expectedDigest, label) {
const response = await fetch(url, { cache: "no-store", credentials: "omit" });
assert(response.ok, `${label} request failed with status ${response.status}.`);
const buffer = await response.arrayBuffer();
const digest = await sha256Hex(buffer);
assert(digest === expectedDigest, `${label} digest changed; manual review is required before display.`);
return { buffer, digest };
}
function validateEvidenceRows(rows) {
assert(Array.isArray(rows) && rows.length === 4, "Expected exactly four detailed observation receipts.");
const ids = new Set();
const steps = [];
for (const row of rows) {
assert(row && row.schema === EXPECTED_EVIDENCE_SCHEMA, "Unexpected evidence schema.");
assert(typeof row.evidence_id === "string" && !ids.has(row.evidence_id), "Evidence IDs must be unique.");
ids.add(row.evidence_id);
const subject = row.subject;
assert(subject.repo_id === EXPECTED_REPO, "Unexpected model repository.");
assert(/^step[0-9]+$/.test(subject.declared_ref), "A checkpoint ref is malformed.");
assert(subject.declared_ref === `step${subject.step}`, "Step and declared ref disagree.");
assert(row.evidence_id === `pythia-70m-deduped:${subject.declared_ref}:piqa:acc_norm`, "Evidence ID and subject disagree.");
assert(COMMIT_PATTERN.test(subject.observed_branch_target_commit), "An observed branch target is not pinned to a full commit.");
assert(Number.isFinite(Date.parse(row.source_reviewed_at)), "Source review time is malformed.");
assert(Number.isFinite(Date.parse(subject.branch_target_observed_at)), "Branch-target observation time is malformed.");
assert(subject.tokens_seen.status === "derived", "Tokens seen must be labelled derived.");
assert(subject.tokens_seen.method === "step * 2097152", "Unexpected token derivation.");
assert(subject.tokens_seen.source_repo === EXPECTED_REPO, "Token derivation source repository changed.");
assert(subject.tokens_seen.source_commit === TOKEN_SOURCE_COMMIT, "Token derivation source commit changed.");
assert(subject.tokens_seen.source_path === "README.md", "Token derivation source path changed.");
assert(subject.tokens_seen.value === subject.step * 2097152, "Derived token count does not match its rule.");
steps.push(subject.step);
const artifact = row.artifact;
assert(artifact.path === "model.safetensors", "Unexpected artifact path.");
assert(SHA256_PATTERN.test(artifact.reported_lfs_oid), "Reported artifact LFS object ID is malformed.");
assert(artifact.retrieval_status === "metadata_only" && artifact.execution_status === "not_run", "Artifact handling exceeds the reviewed metadata-only scope.");
assert(artifact.relationship_to_evaluation === "not_proven", "Observed artifact metadata cannot silently become the evaluated artifact.");
const metric = row.metric_observation;
assert(metric.task === "piqa" && metric.metric === "acc_norm", "Unexpected metric.");
assert(Number.isFinite(metric.value) && Number.isFinite(metric.stderr), "Metric values must be finite.");
assert(metric.value >= 0 && metric.value <= 1 && metric.stderr >= 0, "Metric value is out of range.");
assert(metric.source_commit === PINNED_EVAL_COMMIT, "Evaluation source is not the reviewed commit.");
assert(COMMIT_PATTERN.test(metric.source_blob_sha1), "Evaluation blob digest is malformed.");
assert(SOURCE_PATH_PATTERN.test(metric.source_path), "Evaluation source path is outside the reviewed tree.");
assert(metric.source_path.endsWith(`_${subject.declared_ref}.json`), "Evaluation path and declared ref disagree.");
assert(metric.reported_run_config.model_args.split(",").includes(`revision=${subject.declared_ref}`), "Reported model arguments and declared ref disagree.");
assert(metric.comparison_status === "not_proven", "Published reports cannot silently become a proven comparison.");
assert(metric.evaluated_model_commit === null && metric.evaluated_artifact_digest === null, "The upstream evaluation did not report an evaluated artifact identity.");
assert(metric.metric_to_observed_branch_artifact_binding === "not_proven", "Metric-to-observed-artifact binding is not proven.");
const selection = row.selection;
assert(selection.model_checkpoint_frame_count === 154, "Model checkpoint frame changed.");
assert(selection.published_evaluation_report_frame_count === 27, "Published evaluation-report frame changed.");
assert(selection.visualized_report_count === 27 && selection.visualization_scope === "all-reports-in-pinned-directory", "Visualization no longer covers all reports in the pinned directory.");
assert(selection.detailed_receipt_steps.join(",") === DETAILED_STEPS.join(","), "Detailed receipt steps changed.");
assert(selection.published_report_without_detailed_receipt_count === 23, "Detailed receipt omission count changed.");
assert(selection.checkpoint_without_published_report_count === 127, "Unreported checkpoint count changed.");
assert(selection.detail_selection_method === "illustrative-hand-selection", "Detail selection method must remain explicit.");
assert(selection.detail_selected_before_outcomes_seen === false, "Detailed receipts were selected after outcomes were seen.");
assert(selection.detail_representativeness === "not_claimed", "The detail subset cannot claim representativeness.");
assert(selection.task_sampling_frame === "87-common-reported-tasks", "Task sampling frame changed.");
assert(selection.included_task_metric === "piqa.acc_norm" && selection.omitted_task_count === 86, "Task selection receipt changed.");
assert(selection.task_selected_before_outcomes_seen === false, "The task metric was selected after outcomes were available.");
assert(row.authority.carried_by_this_record === false, "Evidence records cannot carry action authority.");
assert(row.authority.established_by_this_view === false, "This view cannot establish action authority.");
assert(row.authority.external_authority_status === "not_checked", "External authority is outside this view's evidence.");
assert(row.unknowns.resume_replay_equivalence === undefined, "Replay status belongs in claims, not an open unknown list.");
assert(row.claims.resume_replay_equivalence === "not_tested", "Exact replay equivalence must remain untested.");
}
assert(steps.join(",") === DETAILED_STEPS.join(","), "The detailed receipt grid changed.");
}
function validateContextRows(rows) {
assert(Array.isArray(rows) && rows.length === 27, "Expected all 27 reports from the pinned directory.");
assert(rows.map((row) => row.step).join(",") === CONTEXT_STEPS.join(","), "Published report context changed.");
const ids = new Set();
for (const row of rows) {
assert(row && row.schema === EXPECTED_CONTEXT_SCHEMA, "Unexpected report-context schema.");
assert(row.declared_ref === `step${row.step}`, "Context step and ref disagree.");
assert(row.context_id === `pythia-70m-deduped:${row.declared_ref}:piqa:acc_norm:published-report-context`, "Context ID and ref disagree.");
assert(!ids.has(row.context_id), "Context IDs must be unique.");
ids.add(row.context_id);
assert(Number.isFinite(Date.parse(row.source_reviewed_at)), "Context review time is malformed.");
assert(row.tokens_seen_status === "derived" && row.tokens_seen_method === "step * 2097152", "Context tokens must remain explicitly derived.");
assert(row.tokens_seen === row.step * 2097152, "Context token count does not match its rule.");
assert(row.task === "piqa" && row.metric === "acc_norm", "Unexpected context metric.");
assert(Number.isFinite(row.value) && row.value >= 0 && row.value <= 1, "Context metric is out of range.");
assert(Number.isFinite(row.stderr) && row.stderr >= 0, "Context standard error is out of range.");
assert(row.source_repo === "EleutherAI/pythia" && row.source_commit === PINNED_EVAL_COMMIT, "Context source changed.");
assert(SOURCE_PATH_PATTERN.test(row.source_path) && row.source_path.endsWith(`_${row.declared_ref}.json`), "Context source path and ref disagree.");
assert(COMMIT_PATTERN.test(row.source_blob_sha1), "Context Git blob digest is malformed.");
assert(row.evaluated_model_commit === null && row.evaluated_artifact_digest === null, "Context cannot invent evaluated artifact identity.");
assert(row.metric_to_model_artifact_binding === "not_proven" && row.comparison_status === "not_proven", "Context cannot promote binding or comparability.");
assert(row.detailed_receipt_in_this_release === DETAILED_STEPS.includes(row.step), "Context detail flag changed.");
assert(row.carried_action_authority === false, "Context records cannot carry action authority.");
}
}
function validateReleaseLock(lock, files) {
assert(lock && lock.schema === EXPECTED_LOCK_SCHEMA, "Unexpected release-lock schema.");
assert(lock.evidence_bundle.path === "data/evidence.jsonl", "Release-lock evidence path changed.");
assertSame(lock.evidence_bundle.sha256, files.evidenceDigest, "Evidence digest");
assertSame(lock.evidence_bundle.bytes, files.evidenceBytes, "Evidence byte count");
assertSame(lock.evidence_bundle.records, evidence.length, "Evidence record count");
assert(lock.context_bundle.path === "data/published-piqa-context.jsonl", "Release-lock context path changed.");
assertSame(lock.context_bundle.sha256, files.contextDigest, "Context digest");
assertSame(lock.context_bundle.bytes, files.contextBytes, "Context byte count");
assertSame(lock.context_bundle.records, reportContext.length, "Context record count");
const lockById = new Map(lock.records.map((record) => [record.evidence_id, record]));
assert(lockById.size === evidence.length, "Release-lock record set changed.");
for (const row of evidence) {
const expected = lockById.get(row.evidence_id);
assert(expected, "A detailed evidence row is absent from the release lock.");
assertSame(expected.declared_ref, row.subject.declared_ref, "Declared ref");
assertSame(expected.step, row.subject.step, "Checkpoint step");
assertSame(expected.observed_branch_target_commit, row.subject.observed_branch_target_commit, "Observed branch target");
assertSame(expected.reported_artifact_bytes, row.artifact.bytes, "Reported artifact byte count");
assertSame(expected.reported_lfs_oid, row.artifact.reported_lfs_oid, "Reported LFS object ID");
assertSame(expected.evaluation_source_path, row.metric_observation.source_path, "Evaluation path");
assertSame(expected.evaluation_blob_sha1, row.metric_observation.source_blob_sha1, "Evaluation Git blob");
assertSame(expected.reported_model_args, row.metric_observation.reported_run_config.model_args, "Reported model arguments");
assertSame(expected.reported_batch_size, row.metric_observation.reported_run_config.batch_size, "Reported batch size");
assertSame(expected.reported_device, row.metric_observation.reported_run_config.device, "Reported device");
assertSame(expected.reported_value, row.metric_observation.value, "Reported metric value");
assertSame(expected.reported_stderr, row.metric_observation.stderr, "Reported standard error");
assertSame(row.source_reviewed_at, lock.source_reviewed_at, "Source review time");
assertSame(row.subject.branch_target_observed_at, lock.source_reviewed_at, "Branch-target observation time");
}
const shared = lock.shared;
assert(shared.evaluation_source_repo === "EleutherAI/pythia" && shared.evaluation_source_commit === PINNED_EVAL_COMMIT, "Locked evaluation source changed.");
assert(shared.training_source_repo === "EleutherAI/pythia" && shared.training_source_commit === PINNED_EVAL_COMMIT, "Locked training source changed.");
assert(shared.training_config_path === "models/70M/pythia-70m-deduped.yml", "Locked training config path changed.");
assert(shared.training_config_blob_sha1 === "1a447e6871469a39b66761b022e435d860b2cabe", "Locked training config blob changed.");
assert(shared.token_derivation_source_repo === EXPECTED_REPO && shared.token_derivation_source_commit === TOKEN_SOURCE_COMMIT && shared.token_derivation_source_path === "README.md", "Locked token derivation source changed.");
assert(shared.token_derivation_method === "step * 2097152", "Locked token derivation method changed.");
assert(shared.evaluated_model_commit === null && shared.evaluated_artifact_digest === null, "Release lock cannot invent evaluated artifact identity.");
assert(shared.metric_to_observed_branch_artifact_binding === "not_proven", "Release lock cannot promote artifact binding.");
for (const row of evidence) {
assertSame(row.training_source.repo, shared.training_source_repo, "Training source repository");
assertSame(row.training_source.commit, shared.training_source_commit, "Training source commit");
assertSame(row.training_source.config_path, shared.training_config_path, "Training config path");
assertSame(row.training_source.config_blob_sha1, shared.training_config_blob_sha1, "Training config Git blob");
}
const selection = lock.selection;
assert(selection.model_checkpoint_frame_count === 154 && selection.published_evaluation_report_frame_count === 27, "Locked report frame changed.");
assert(selection.visualized_report_count === 27 && selection.visualization_scope === "all-reports-in-pinned-directory", "Locked visualization scope changed.");
assert(selection.detailed_receipt_steps.join(",") === DETAILED_STEPS.join(","), "Locked detailed receipt steps changed.");
assert(selection.published_report_without_detailed_receipt_count === 23 && selection.checkpoint_without_published_report_count === 127, "Locked missing-report counts changed.");
assert(selection.task_sampling_frame === "87-common-reported-tasks" && selection.included_task_metric === "piqa.acc_norm" && selection.omitted_task_count === 86, "Locked task selection changed.");
assert(selection.task_selected_before_outcomes_seen === false, "Locked task selection timing changed.");
const contextByStep = new Map(reportContext.map((row) => [row.step, row]));
for (const row of evidence) {
const context = contextByStep.get(row.subject.step);
assert(context && context.detailed_receipt_in_this_release, "A detailed receipt is missing from published-report context.");
assertSame(context.tokens_seen, row.subject.tokens_seen.value, "Context token count");
assertSame(context.value, row.metric_observation.value, "Context metric value");
assertSame(context.stderr, row.metric_observation.stderr, "Context standard error");
assertSame(context.source_path, row.metric_observation.source_path, "Context evaluation path");
assertSame(context.source_blob_sha1, row.metric_observation.source_blob_sha1, "Context evaluation Git blob");
}
assert(reportContext.every((row) => row.source_reviewed_at === lock.source_reviewed_at), "Context review times and release lock disagree.");
assert(lock.authentication.publisher_authenticated === false && lock.authentication.provenance_authenticated === false, "Release consistency cannot silently become publisher authentication.");
assert(lock.authentication.purpose === "release consistency only", "Release-lock purpose changed.");
}
function svgElement(name, attributes = {}) {
const node = document.createElementNS(SVG_NS, name);
for (const [key, value] of Object.entries(attributes)) node.setAttribute(key, String(value));
return node;
}
function formatTokens(tokens) {
if (tokens === 0) return "0";
if (tokens < 1_000_000_000) return `${(tokens / 1_000_000).toFixed(1)}M`;
const billions = tokens / 1_000_000_000;
return `${billions < 10 ? billions.toFixed(1) : billions.toFixed(0)}B`;
}
function formatPercent(value, digits = 2) {
return `${(value * 100).toFixed(digits)}%`;
}
function formatReviewedAt(value) {
const date = new Date(value);
return `${new Intl.DateTimeFormat("en-GB", { day: "numeric", month: "short", year: "numeric", timeZone: "UTC" }).format(date)} ${new Intl.DateTimeFormat("en-GB", { hour: "2-digit", minute: "2-digit", hour12: false, timeZone: "UTC" }).format(date)} UTC`;
}
function shortHash(hash) {
return `${hash.slice(0, 8)}${hash.slice(-6)}`;
}
function addText(parent, text, x, y, className, anchor = "start") {
const node = svgElement("text", { x, y, class: className, "text-anchor": anchor });
node.textContent = text;
parent.append(node);
return node;
}
function appendErrorBar(parent, xPosition, value, stderr, yScale, className) {
const errorTop = yScale(Math.min(1, value + stderr));
const errorBottom = yScale(Math.max(0, value - stderr));
parent.append(svgElement("line", { x1: xPosition, x2: xPosition, y1: errorTop, y2: errorBottom, class: className }));
parent.append(svgElement("line", { x1: xPosition - 3, x2: xPosition + 3, y1: errorTop, y2: errorTop, class: className }));
parent.append(svgElement("line", { x1: xPosition - 3, x2: xPosition + 3, y1: errorBottom, y2: errorBottom, class: className }));
}
function pointClass(row) {
return row.detailed_receipt_in_this_release ? "chart-point detailed" : "chart-point context-only";
}
function evidenceIdForContext(row) {
return row.detailed_receipt_in_this_release ? `pythia-70m-deduped:${row.declared_ref}:piqa:acc_norm` : "";
}
function renderChart() {
chart.querySelectorAll(".generated").forEach((node) => node.remove());
const width = 820;
const height = 360;
const margin = { top: 35, right: 34, bottom: 55, left: 62 };
const innerWidth = width - margin.left - margin.right;
const innerHeight = height - margin.top - margin.bottom;
const maxTokens = Math.max(...reportContext.map((row) => row.tokens_seen));
const x = (tokens) => margin.left + (tokens / maxTokens) * innerWidth;
const y = (value) => margin.top + (1 - value) * innerHeight;
const group = svgElement("g", { class: "generated" });
chart.append(group);
for (let index = 0; index <= 4; index += 1) {
const value = index / 4;
const yPosition = y(value);
group.append(svgElement("line", {
x1: margin.left,
x2: width - margin.right,
y1: yPosition,
y2: yPosition,
class: "chart-grid"
}));
addText(group, formatPercent(value, 0), margin.left - 12, yPosition + 4, "chart-label", "end");
}
group.append(svgElement("line", {
x1: margin.left,
x2: width - margin.right,
y1: height - margin.bottom,
y2: height - margin.bottom,
class: "chart-axis"
}));
const tokenTicks = [0, 100_000_000_000, 200_000_000_000, maxTokens];
for (const tokens of tokenTicks) {
const xPosition = x(tokens);
group.append(svgElement("line", {
x1: xPosition,
x2: xPosition,
y1: height - margin.bottom,
y2: height - margin.bottom + 6,
class: "chart-axis"
}));
addText(group, formatTokens(tokens), xPosition, height - margin.bottom + 24, "chart-label", "middle");
}
addText(group, "derived tokens seen", margin.left + innerWidth / 2, height - 12, "chart-label", "middle");
for (const row of reportContext) {
const xPosition = x(row.tokens_seen);
const yPosition = y(row.value);
appendErrorBar(group, xPosition, row.value, row.stderr, y, row.detailed_receipt_in_this_release ? "chart-error detailed" : "chart-error");
const visiblePoint = svgElement("circle", {
cx: xPosition,
cy: yPosition,
r: row.detailed_receipt_in_this_release ? 5 : 3,
class: pointClass(row)
});
if (row.detailed_receipt_in_this_release) visiblePoint.dataset.evidenceId = evidenceIdForContext(row);
group.append(visiblePoint);
}
const earlyRows = reportContext.filter((row) => row.step <= 1000);
const inset = { x: 478, y: 43, width: 304, height: 92, left: 492, right: 768, top: 66, bottom: 119 };
group.append(svgElement("rect", { x: inset.x, y: inset.y, width: inset.width, height: inset.height, rx: 10, class: "chart-inset" }));
addText(group, "early inset · logarithmic step spacing", inset.x + 12, inset.y + 16, "chart-inset-label");
group.append(svgElement("line", { x1: inset.left, x2: inset.right, y1: inset.bottom, y2: inset.bottom, class: "chart-inset-axis" }));
const insetX = (step) => inset.left + (Math.log2(step + 1) / Math.log2(1001)) * (inset.right - inset.left);
const insetY = (value) => inset.top + (1 - value) * (inset.bottom - inset.top);
for (const row of earlyRows) {
const xPosition = insetX(row.step);
appendErrorBar(group, xPosition, row.value, row.stderr, insetY, "chart-error inset-error");
const point = svgElement("circle", {
cx: xPosition,
cy: insetY(row.value),
r: row.detailed_receipt_in_this_release ? 4 : 2.4,
class: pointClass(row)
});
if (row.detailed_receipt_in_this_release) point.dataset.evidenceId = evidenceIdForContext(row);
group.append(point);
}
addText(group, "step 0", inset.left, inset.bottom + 12, "chart-inset-tick");
addText(group, "step 1,000", inset.right, inset.bottom + 12, "chart-inset-tick", "end");
}
function renderObservationButtons() {
observationRow.replaceChildren();
for (const row of evidence) {
const button = document.createElement("button");
button.type = "button";
button.className = "observation-button";
button.dataset.evidenceId = row.evidence_id;
button.setAttribute("aria-pressed", "false");
const step = document.createElement("small");
step.textContent = `${row.subject.declared_ref} · ${formatTokens(row.subject.tokens_seen.value)} tokens`;
const value = document.createElement("strong");
value.textContent = `${formatPercent(row.metric_observation.value)} ± ${formatPercent(row.metric_observation.stderr)}`;
button.append(step, value);
button.addEventListener("click", () => selectEvidence(row.evidence_id));
observationRow.append(button);
}
}
function renderContextTable() {
contextTableBody.replaceChildren();
for (const row of reportContext) {
const tableRow = document.createElement("tr");
const stepCell = document.createElement("th");
stepCell.scope = "row";
stepCell.textContent = row.declared_ref;
const tokensCell = document.createElement("td");
tokensCell.textContent = formatTokens(row.tokens_seen);
const valueCell = document.createElement("td");
valueCell.textContent = `${formatPercent(row.value)} ± ${formatPercent(row.stderr)}`;
const detailCell = document.createElement("td");
detailCell.textContent = row.detailed_receipt_in_this_release ? "post-outcome detail receipt" : "source receipt only";
const sourceCell = document.createElement("td");
sourceCell.append(sourceLink("exact JSON ↗", `https://github.com/EleutherAI/pythia/blob/${PINNED_EVAL_COMMIT}/${row.source_path}`));
tableRow.append(stepCell, tokensCell, valueCell, detailCell, sourceCell);
contextTableBody.append(tableRow);
}
}
function renderSnapshotStatus(lock) {
snapshotStatus.textContent = `Source metadata observed ${formatReviewedAt(lock.source_reviewed_at)} · no automatic refresh · manually recheck before treating it as current`;
}
function receiptItem(label, value) {
const wrapper = document.createElement("div");
const term = document.createElement("dt");
const description = document.createElement("dd");
term.textContent = label;
description.textContent = value;
wrapper.append(term, description);
return wrapper;
}
function sourceLink(label, href) {
const link = document.createElement("a");
link.href = href;
link.target = "_blank";
link.rel = "noopener noreferrer";
link.textContent = label;
return link;
}
function renderInspection(row) {
inspectionDetail.replaceChildren();
const head = document.createElement("div");
head.className = "receipt-head";
const headingWrap = document.createElement("div");
const eyebrow = document.createElement("p");
eyebrow.className = "eyebrow";
eyebrow.textContent = "Post-outcome-selected detail receipt";
const heading = document.createElement("h3");
heading.textContent = row.subject.declared_ref;
const subtitle = document.createElement("p");
subtitle.textContent = `${formatTokens(row.subject.tokens_seen.value)} derived tokens seen`;
subtitle.className = "scope-note";
headingWrap.append(eyebrow, heading, subtitle);
const value = document.createElement("span");
value.className = "receipt-value";
value.textContent = `${formatPercent(row.metric_observation.value)} ± ${formatPercent(row.metric_observation.stderr)}`;
head.append(headingWrap, value);
const grid = document.createElement("dl");
grid.className = "receipt-grid";
grid.append(
receiptItem(`Branch target observed ${formatReviewedAt(row.subject.branch_target_observed_at)}`, shortHash(row.subject.observed_branch_target_commit)),
receiptItem("Observed target's reported LFS object ID", shortHash(row.artifact.reported_lfs_oid)),
receiptItem("Evaluation Git blob", shortHash(row.metric_observation.source_blob_sha1)),
receiptItem("Evaluated model commit", "not reported upstream"),
receiptItem("Metric ↔ observed artifact", row.metric_observation.metric_to_observed_branch_artifact_binding.replace(/_/g, " ")),
receiptItem("Reported run", `batch ${row.metric_observation.reported_run_config.batch_size} · ${row.metric_observation.reported_run_config.device || "device not reported"}`),
receiptItem("Comparability", row.metric_observation.comparison_status.replace(/_/g, " ")),
receiptItem("External authority", row.authority.external_authority_status.replace(/_/g, " "))
);
const warning = document.createElement("p");
warning.className = "receipt-warning";
warning.textContent = "The evaluation named a mutable branch but no model commit or artifact digest. The historical metric is not proven to belong to the branch target observed in this frozen review snapshot.";
const links = document.createElement("p");
links.className = "receipt-links";
const modelUrl = `https://huggingface.co/${EXPECTED_REPO}/tree/${row.subject.observed_branch_target_commit}`;
const evaluationUrl = `https://github.com/EleutherAI/pythia/blob/${PINNED_EVAL_COMMIT}/${row.metric_observation.source_path}`;
links.append(
sourceLink("Observed branch target ↗", modelUrl),
sourceLink("Exact evaluation file ↗", evaluationUrl)
);
inspectionDetail.append(head, grid, warning, links);
}
function selectEvidence(evidenceId) {
const row = evidence.find((item) => item.evidence_id === evidenceId);
if (!row) return;
document.querySelectorAll(".observation-button").forEach((button) => {
button.setAttribute("aria-pressed", String(button.dataset.evidenceId === evidenceId));
});
document.querySelectorAll(".chart-point.detailed").forEach((point) => {
point.classList.toggle("selected", point.dataset.evidenceId === evidenceId);
});
emptyInspection.hidden = true;
inspectionDetail.hidden = false;
renderInspection(row);
}
function showFailure(message) {
view.hidden = true;
failure.hidden = false;
failureMessage.textContent = message;
}
async function loadEvidence() {
try {
assert(window.isSecureContext, "A secure context is required to verify release digests.");
const [evidenceFile, contextFile, lockFile] = await Promise.all([
fetchReviewedFile(EVIDENCE_URL, EXPECTED_EVIDENCE_SHA256, "Detailed evidence"),
fetchReviewedFile(CONTEXT_URL, EXPECTED_CONTEXT_SHA256, "Published-report context"),
fetchReviewedFile(RELEASE_LOCK_URL, EXPECTED_RELEASE_LOCK_SHA256, "Release lock")
]);
evidence = parseJsonLines(evidenceFile.buffer, "Detailed evidence");
reportContext = parseJsonLines(contextFile.buffer, "Published-report context");
const lock = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(lockFile.buffer));
validateEvidenceRows(evidence);
validateContextRows(reportContext);
validateReleaseLock(lock, {
evidenceDigest: evidenceFile.digest,
evidenceBytes: evidenceFile.buffer.byteLength,
contextDigest: contextFile.digest,
contextBytes: contextFile.buffer.byteLength
});
renderSnapshotStatus(lock);
renderChart();
renderObservationButtons();
renderContextTable();
failure.hidden = true;
view.hidden = false;
} catch (error) {
showFailure(error instanceof Error ? error.message : "The reviewed release failed closed.");
}
}
loadEvidence();