feat: add render graph driven renderer architecture

Amp-Thread-ID: https://ampcode.com/threads/T-019f9d91-77c1-7206-a60f-ed6554ce92ab

Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
This commit is contained in:
Amp
2026-07-27 02:53:44 +00:00
co-authored by heaust
parent 8a8369706b
commit d4e8634f67
290 changed files with 48804 additions and 1995 deletions
+38
View File
@@ -0,0 +1,38 @@
import { createHash } from "node:crypto";
import { readFile } from "node:fs/promises";
import { resolve } from "node:path";
import { referenceManifest } from "@lib/research/reference-manifest.js";
import { REFERENCE_IDS } from "@lib/research/reference-types.js";
const strict = process.argv.includes("--strict");
const sha256Pattern = /^[a-f0-9]{64}$/u;
const ids = referenceManifest.references.map(({ id }) => id);
if (
ids.length !== REFERENCE_IDS.length ||
new Set(ids).size !== REFERENCE_IDS.length ||
REFERENCE_IDS.some((id) => !ids.includes(id))
) {
throw new Error("Reference manifest must contain each of the eight reference IDs exactly once.");
}
if (!sha256Pattern.test(referenceManifest.baseline.binarySha256)) throw new Error("Invalid baseline binary SHA256.");
let captured = 0;
for (const reference of referenceManifest.references) {
if (reference.status === "pending") {
if (!reference.reason.trim()) throw new Error(`${reference.id}: pending references require a reason.`);
continue;
}
captured++;
if (!sha256Pattern.test(reference.sha256)) throw new Error(`${reference.id}: invalid SHA256.`);
const bytes = await readFile(resolve(reference.relativePath));
const actual = createHash("sha256").update(bytes).digest("hex");
if (actual !== reference.sha256) throw new Error(`${reference.id}: hash mismatch.`);
if (bytes.subarray(0, 8).toString("hex") !== "89504e470d0a1a0a") throw new Error(`${reference.id}: not a PNG.`);
if (bytes.readUInt32BE(16) !== reference.width || bytes.readUInt32BE(20) !== reference.height)
throw new Error(`${reference.id}: dimensions mismatch.`);
}
if (strict && captured !== REFERENCE_IDS.length)
throw new Error(`Strict reference check: ${captured}/8 captured; ${8 - captured} pending.`);
console.log(
`references: manifest valid; ${captured}/8 captured, ${8 - captured}/8 pending${strict ? " (strict)" : ""}`,
);