chore: checkpoint web Blender migration source, tools and docs
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

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:
mes123456
2026-11-10 11:18:01 +08:00
parent 122142c26c
commit f3e21c6b98
6887 changed files with 257154 additions and 12294 deletions

View File

@@ -30,6 +30,8 @@ export interface LODCacheRecord extends LODManifest {
profileHash: string;
poseOrRestState: LODPoseState;
generatedAt: string;
sourceBlendSha256?: string;
contentSha256?: string;
byteLength?: number;
lastAccessAt?: string;
}
@@ -81,6 +83,7 @@ export function parseLODCacheRecord(value: unknown): LODCacheRecord {
throw new SimplifyValidationError("INVALID_LOD_MANIFEST", "LOD cache record must be an object");
}
const input = value as Record<string, unknown>;
for (const key of ['sourceBlendSha256', 'contentSha256']) if (input[key] !== undefined && (typeof input[key] !== 'string' || !/^[a-f0-9]{64}$/.test(input[key]))) throw new SimplifyValidationError('INVALID_LOD_MANIFEST', `${key} must be a SHA-256 digest`);
const fields = ["cacheKey", "objectId", "modifierStackHash", "profileHash", "generatedAt"];
if (fields.some((field) => typeof input[field] !== "string" || !input[field])) {
throw new SimplifyValidationError("INVALID_LOD_MANIFEST", "LOD cache record metadata is incomplete");
@@ -96,6 +99,8 @@ export function parseLODCacheRecord(value: unknown): LODCacheRecord {
profileHash: input.profileHash as string,
poseOrRestState: input.poseOrRestState,
generatedAt: input.generatedAt as string,
...(input.sourceBlendSha256 === undefined ? {} : { sourceBlendSha256: input.sourceBlendSha256 as string }),
...(input.contentSha256 === undefined ? {} : { contentSha256: input.contentSha256 as string }),
};
if (lodManifestCacheKey(record) !== record.cacheKey) {
throw new SimplifyValidationError("INVALID_LOD_MANIFEST", "LOD cacheKey does not match its source inputs");