chore: checkpoint web Blender migration source, tools and docs
Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer, web workflow engine and protocol, tooling, docs and task records. Large generated evidence, user-testing archives, build snapshots and imported test assets remain untracked. Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -34,6 +34,8 @@ let catalog = [];
|
||||
let plan = null;
|
||||
let matrix = null;
|
||||
let completed = [];
|
||||
let dynamicInventory = null;
|
||||
let dynamicInventoryManifest = null;
|
||||
|
||||
try {
|
||||
queue = parseQueue();
|
||||
@@ -46,23 +48,39 @@ try {
|
||||
|
||||
const capabilityIndex = queue.currentTask.startsWith("WBV2-");
|
||||
index = json(capabilityIndex ? "tests/golden/WBV2/task-index.json" : "tests/golden/M15-03A/task-index.json");
|
||||
if (index.activeTask !== queue.currentTask) addIssue(issues, "INDEX_ACTIVE_TASK_MISMATCH", `${index.activeTask}!=${queue.currentTask}`);
|
||||
const currentManifestPath = path.join(root, "tests/golden", queue.currentTask, "manifest.json");
|
||||
const currentManifest = fs.existsSync(currentManifestPath) ? JSON.parse(fs.readFileSync(currentManifestPath, "utf8")) : null;
|
||||
const terminal = index.activeTask === null && currentManifest?.status === "done" && currentManifest?.nextTask === null;
|
||||
if (!terminal && index.activeTask !== queue.currentTask) addIssue(issues, "INDEX_ACTIVE_TASK_MISMATCH", `${index.activeTask ?? "NONE"}!=${queue.currentTask}`);
|
||||
const catalogPath = path.join(root, index.catalog.path);
|
||||
if (!fs.existsSync(catalogPath)) addIssue(issues, "CATALOG_MISSING", index.catalog.path);
|
||||
else {
|
||||
catalog = fs.readFileSync(catalogPath, "utf8").trimEnd().split("\n").filter(Boolean).map((line) => JSON.parse(line));
|
||||
const active = catalog.filter((entry) => entry.state === "active");
|
||||
if (active.length !== 1) addIssue(issues, "ACTIVE_TASK_COUNT", `count=${active.length}`);
|
||||
else if (active[0].id !== queue.currentTask) addIssue(issues, "CATALOG_ACTIVE_TASK_MISMATCH", `${active[0].id}!=${queue.currentTask}`);
|
||||
if (terminal ? active.length !== 0 : active.length !== 1) addIssue(issues, "ACTIVE_TASK_COUNT", `count=${active.length}`);
|
||||
else if (!terminal && active[0].id !== queue.currentTask) addIssue(issues, "CATALOG_ACTIVE_TASK_MISMATCH", `${active[0].id}!=${queue.currentTask}`);
|
||||
}
|
||||
|
||||
plan = json("tests/golden/M15-03A/next-task-plan.json");
|
||||
matrix = json("docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json");
|
||||
completed = json("tests/golden/M15-03A/completed-gap-tasks.json");
|
||||
dynamicInventory = json("tests/golden/WBV2/dynamic-inventory.json");
|
||||
dynamicInventoryManifest = json("tests/golden/WBV2/dynamic-inventory-manifest.json");
|
||||
} catch (error) {
|
||||
addIssue(issues, "CONTROL_PLANE_READ_ERROR", error instanceof Error ? error.message : String(error));
|
||||
}
|
||||
|
||||
if (!dynamicInventory || !dynamicInventoryManifest) addIssue(issues, "DYNAMIC_INVENTORY_MISSING", "tests/golden/WBV2/dynamic-inventory.json and manifest");
|
||||
else {
|
||||
if (dynamicInventory.operation !== "BLENDER_52_SOURCE_DYNAMIC_INVENTORY" || !["SOURCE_DERIVED_UNVERIFIED", "SOURCE_DERIVED_WITH_EXPLICIT_COVERAGE"].includes(dynamicInventory.status)) addIssue(issues, "DYNAMIC_INVENTORY_INVALID", "operation/status");
|
||||
if (dynamicInventory.policy?.hardTarget !== false || dynamicInventory.policy?.planningEstimate !== 5200) addIssue(issues, "DYNAMIC_INVENTORY_POLICY_INVALID", "planning estimate must remain non-binding");
|
||||
if ((dynamicInventory.coverage?.verifiedUnits ?? 0) + (dynamicInventory.coverage?.unverifiedUnits ?? 0) !== dynamicInventory.summary?.unitCount) addIssue(issues, "DYNAMIC_INVENTORY_COVERAGE_INVALID", "verified plus unverified must equal source unit count");
|
||||
if (dynamicInventoryManifest.operation !== "BLENDER_52_SOURCE_DYNAMIC_INVENTORY" || dynamicInventoryManifest.status !== "done") addIssue(issues, "DYNAMIC_INVENTORY_MANIFEST_INVALID", "operation/status");
|
||||
for (const artifact of Object.values(dynamicInventoryManifest.artifacts ?? {})) {
|
||||
if (!fs.existsSync(path.join(root, artifact.path)) || sha256(fs.readFileSync(path.join(root, artifact.path))) !== artifact.sha256) addIssue(issues, "DYNAMIC_INVENTORY_MANIFEST_HASH_DRIFT", artifact.path);
|
||||
}
|
||||
}
|
||||
|
||||
const active = catalog.find((entry) => entry.state === "active") ?? null;
|
||||
let legacyCoverage = null;
|
||||
try {
|
||||
@@ -124,6 +142,17 @@ const report = {
|
||||
productiveLane: capabilities.filter((entry) => entry.lifecycleStatus === "done" && ["L2", "L3", "L4", "L5"].includes(entry.parityLevel)).length,
|
||||
rule: "one capability task may close multiple legacy cases; legacy cases remain regression coverage",
|
||||
},
|
||||
dynamicInventory: dynamicInventory ? {
|
||||
path: "tests/golden/WBV2/dynamic-inventory.json",
|
||||
manifestPath: "tests/golden/WBV2/dynamic-inventory-manifest.json",
|
||||
sourceTreeSha256: dynamicInventory.authority.sourceTreeSha256,
|
||||
sourceFiles: dynamicInventory.summary.sourceFiles,
|
||||
unitCount: dynamicInventory.summary.unitCount,
|
||||
planningEstimate: dynamicInventory.policy.planningEstimate,
|
||||
hardTarget: dynamicInventory.policy.hardTarget,
|
||||
verifiedUnits: dynamicInventory.coverage.verifiedUnits,
|
||||
unverifiedUnits: dynamicInventory.coverage.unverifiedUnits,
|
||||
} : null,
|
||||
capabilityClusters,
|
||||
issues,
|
||||
remediation: issues.map(({ code }) => ({
|
||||
|
||||
Reference in New Issue
Block a user