Align VDB status and release evidence
This commit is contained in:
52
tools/web/check-status-consistency.mjs
Normal file
52
tools/web/check-status-consistency.mjs
Normal file
@@ -0,0 +1,52 @@
|
||||
import assert from "node:assert/strict";
|
||||
import crypto from "node:crypto";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
||||
const read = (relativePath) => fs.readFileSync(path.join(root, relativePath), "utf8");
|
||||
const ledgerBytes = fs.readFileSync(path.join(root, "docs/status/parity-ledger.json"));
|
||||
const ledger = JSON.parse(ledgerBytes);
|
||||
const report = JSON.parse(read("docs/status/release-evidence.json"));
|
||||
const overview = read("docs/PROJECT_STATUS_AND_NEXT_WORK.md");
|
||||
const parity = read("docs/BLENDER_5_2_WEB_FEATURE_PARITY.md");
|
||||
const n015 = read("docs/status/N-015.md");
|
||||
const n026 = read("docs/status/N-026.md");
|
||||
const vdbPlan = read("docs/VDB_NANOVDB_WEBGPU_IMPLEMENTATION_PLAN.md");
|
||||
|
||||
const expectedFamilies = Array.from({ length: 12 }, (_, index) => `N-${String(index + 15).padStart(3, "0")}`);
|
||||
assert.deepEqual(ledger.families.map((family) => family.id), expectedFamilies, "parity ledger family order or coverage drifted");
|
||||
assert.deepEqual(report.families, ledger.families, "release evidence family snapshot is stale");
|
||||
assert.equal(
|
||||
report.sourceSha256,
|
||||
crypto.createHash("sha256").update(ledgerBytes).digest("hex"),
|
||||
"release evidence source hash is stale",
|
||||
);
|
||||
|
||||
const blockedFamilies = ledger.families.filter((family) => family.status === "BLOCKED").map((family) => family.id);
|
||||
const falseEvidence = [];
|
||||
for (const [group, values] of Object.entries(report.evidence)) {
|
||||
if (group === "records") continue;
|
||||
for (const [key, value] of Object.entries(values)) if (value === false) falseEvidence.push(`${group}.${key}`);
|
||||
}
|
||||
const missingCount = blockedFamilies.length + falseEvidence.length;
|
||||
assert.equal(blockedFamilies.length, 12, "this baseline expects N-015 through N-026 to remain explicitly blocked");
|
||||
assert.deepEqual(falseEvidence.sort(), ["faults.oom", "performance.geometry10M", "performance.longMedia"]);
|
||||
assert.equal(missingCount, 15);
|
||||
|
||||
for (const document of [overview, parity]) {
|
||||
assert.match(document, /13 条(?:成功 )?(?:command\/output\/artifact-hash )?(?:有效)?记录|13 条有效记录/);
|
||||
assert.match(document, /15 个缺失/);
|
||||
assert.match(document, /N-015 至 N-02[56]/);
|
||||
}
|
||||
for (const document of [overview, n015, n026, vdbPlan]) {
|
||||
assert.match(document, /desktop\/server converter|desktop\/server OpenVDB|desktop\/server converter|server job/);
|
||||
assert.match(document, /双生产视口|主线程\/Offscreen 生产视口|主线程\/OffscreenCanvas/);
|
||||
assert.match(document, /demand paging|demand-page/);
|
||||
assert.match(document, /发布 golden|desktop\/Chromium.*golden/);
|
||||
}
|
||||
|
||||
process.stdout.write(
|
||||
`status-consistency-ok families=${ledger.families.length} blocked=${blockedFamilies.length} evidenceRecords=${report.evidence.records.length} missing=${missingCount}\n`,
|
||||
);
|
||||
Reference in New Issue
Block a user