Advance Blender 5.2 web parity through M12-03D
Some checks are pending
M6 deployable RC / quick (push) Waiting to run
M6 deployable RC / chromium (push) Blocked by required conditions
M6 deployable RC / release (push) Blocked by required conditions

This commit is contained in:
mes123456
2026-08-17 17:30:27 -04:00
parent 0fe8d2bb56
commit 5a11045ca5
148 changed files with 11683 additions and 66 deletions

View File

@@ -0,0 +1,9 @@
# This is an Asset Catalog Definition file for Blender.
#
# Generated by M12-01B from a locked Blender 5.2 runtime.
VERSION 1
11111111-1111-4111-8111-111111111111:Characters:Characters
22222222-2222-4222-8222-222222222222:Characters/Heroes:Heroes
33333333-3333-4333-8333-333333333333:Materials/Metal:Metal

View File

@@ -0,0 +1,48 @@
{
"schemaVersion": 1,
"task": "M11-14",
"blenderVersion": "5.2.0",
"domains": [
{
"domain": "RENDER",
"fixture": "tests/files/web/m11_render_reference.blend",
"sha256": "d2bea55fe4de0b00e73a9241b4d1b0c802c2eb0e6159c0cd48e007b97b9d3963",
"desktopGolden": "tests/golden/M11-04/manifest.json",
"cancellationCode": "OPEN_CANCELLED",
"budgetCode": "GPU_TEXTURE_BUDGET_EXCEEDED"
},
{
"domain": "COMPOSITOR",
"fixture": "tests/files/web/m11_compositor_allowlist.blend",
"sha256": "e844eba69002101c8cf4f376cdd844c4be78729091627d898634088707374b29",
"desktopGolden": "tests/golden/M11-07/compositor-node-golden.json",
"cancellationCode": "COMPOSITOR_CANCELLED",
"budgetCode": "COMPOSITOR_BUDGET_EXCEEDED"
},
{
"domain": "MEDIA",
"fixture": "tests/files/web/media/sequencer-probe.mp4",
"sha256": "f35a5a2765aef9d0fed7146108c699d0beb03f34414cb27e6b7a7d4871187b65",
"desktopGolden": "tests/golden/M11-09/sequencer-codec-probe.json",
"cancellationCode": "SEQUENCER_CANCELLED",
"budgetCode": "SEQUENCER_BUDGET_EXCEEDED"
}
],
"textureFixture": {
"path": "tests/files/web/resources/udim_1001.png",
"sha256": "0c66d053412de9e99f1fb83fa8f199d061df874ad1b6bda86c76cf3f499382cf"
},
"requiredStages": ["CANCELLATION", "RESTART", "BUDGET", "RELEASE", "RECOVERY"],
"invariants": {
"cancellation": "zero result publication and zero temporary resources",
"restart": "generation 1 and 2 preserve domain identity and output SHA-256",
"budget": "stable domain-specific block before committed state mutation",
"release": "positive resource and byte release followed by zero owned resources",
"recovery": "a bounded real fixture produces non-empty output after restart"
},
"verification": {
"unit": "web/tests/unit/render-compositor-media-recovery.test.mjs",
"browser": "web/tests/e2e/render-compositor-media-recovery.spec.ts",
"command": "npm --prefix web run test:render-compositor-media-recovery"
}
}

View File

@@ -0,0 +1,53 @@
{
"schemaVersion": 1,
"task": "M12-01I",
"parentTask": "M12-01",
"parityId": "N-023-ASSET-CATALOG-SCHEMA",
"status": "READY",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"subtasks": [
{ "task": "M12-01A", "path": "tests/golden/M12-01A/asset-catalog-field-inventory.json", "sha256": "194d5fd0fef5044f5e82a51931a061e226445f0f53410af9dc0594c70a79e936" },
{ "task": "M12-01B", "path": "tests/golden/M12-01B/manifest.json", "sha256": "1ee0abf961b82195e5fb586eb9e59302e4f7f839615f1ebbdf5cdcba8b60accd" },
{ "task": "M12-01C", "path": "tests/golden/M12-01C/manifest.json", "sha256": "612892b03a689ebe19804e495bd29744634ab43a3b29fff41adc2d7a5d0b67b9" },
{ "task": "M12-01D", "path": "tests/golden/M12-01D/manifest.json", "sha256": "fea9e01b51f64a7e9c15dcfc521b3e84636525ffbe0a849f7a6f1b0be2b02e9d" },
{ "task": "M12-01E", "path": "tests/golden/M12-01E/manifest.json", "sha256": "cf55ea1f9430df04fb55bf07c68c1b2099b044b0da0fdb07a7251b13c459724b" },
{ "task": "M12-01F", "path": "tests/golden/M12-01F/manifest.json", "sha256": "127b2b605ac79a891cd6ab516ee031c02624a512e1043b111bfac2ebf1d8278d" },
{ "task": "M12-01G", "path": "tests/golden/M12-01G/manifest.json", "sha256": "2596067956211698f1b7a07d9423411e2db830b72e6b78593354953a568738e7" },
{ "task": "M12-01H", "path": "tests/golden/M12-01H/manifest.json", "sha256": "59138eb83d63ae0d397b152e587fbe005d02bc2d229ee484c279b452ea3f2eae" }
],
"schema": {
"desktopCanonical": { "path": "tests/golden/M12-01B/canonical.json", "sha256": "6fc6def0b9d0e4f51ef40c1d87a1f17074f6340c126a01aee49e5e53271c961e" },
"webV2Golden": { "path": "tests/golden/M12-01C/asset-catalog-v2.json", "sha256": "2abe279cebbffd1341dc61b1fdc5366dd1f6f42769ba36171782019ca61fb929" },
"productionProtocol": { "path": "web/protocol/asset-catalog-v2.ts", "sha256": "0949838efb2f69466368185b80bb1d2e851672d78311fcd5270eb0814576e5d7" }
},
"migration": {
"sourceFixture": { "path": "tests/golden/M12-01D/catalog-v1.json", "sha256": "1cc43d181afefd63b53cb9c3626bb58195fad20187d6e534adc1ecbe65f75da5" },
"targetFixture": { "path": "tests/golden/M12-01D/catalog-v2.json", "sha256": "38e5d1771b3d2d63ce5e10268eac4513f2043b0cbf71ab1799c1868bc2aa97fb" },
"report": { "path": "tests/golden/M12-01D/migration-report.json", "sha256": "57b972c1bbb9ae326c3f264c225c21546682442ff3194fbc343e1c46a2cd410a" },
"productionProtocol": { "path": "web/protocol/asset-catalog-migration.ts", "sha256": "6d74bc5605f94e05208eda82830192d38f88066dfc409058555a8876c785f226" },
"sourceManifestSha256": "cbdc8b03dc9ce1f38b44bae1c7459eb273126cbd6c7dd33115d2b1966e975881",
"targetManifestSha256": "0c08ed1af1dd0998c809f76d969fd21d8fdae28ad37cf5571bdc99b16bf3ec90",
"revision": 7
},
"runtime": {
"indexedDB": { "path": "web/app/src/storage/asset-catalog-indexeddb.ts", "sha256": "283a08bccb5ea301bd2aef8f01d4496972e3962f75e340479336c50e3539ba57" },
"restartWorker": { "path": "web/app/src/workers/asset-catalog-restart-test.worker.ts", "sha256": "e6007d352555be046b89d0becd719692652ee0418cc97087bf7599155f2a538e" },
"catalogCount": 3,
"assetCount": 2,
"faultPoints": ["AFTER_TARGET_PUT", "AFTER_SOURCE_DELETE"],
"restartContexts": ["INITIAL_PAGE", "RELOADED_PAGE", "WORKER_GENERATION_1", "WORKER_GENERATION_2"]
},
"claims": [
"BLENDER_5_2_FIELD_INVENTORY_BOUND",
"DESKTOP_FIXTURE_REOPENED",
"SCHEMA_V2_UTF8_BUDGETED",
"V1_TO_V2_MIGRATION_HASH_BOUND",
"LEGACY_READER_FAIL_CLOSED",
"NEGATIVE_MATRIX_RECOVERS",
"INDEXEDDB_ABORT_PRESERVES_V1",
"PAGE_WORKER_RESTART_IDENTITY_STABLE"
],
"nextTask": "M12-02A"
}

View File

@@ -0,0 +1,264 @@
{
"schemaVersion": 1,
"task": "M12-01A",
"enablingTask": true,
"parityStateChange": false,
"blenderVersion": "5.2.0",
"sources": [
{
"role": "DNA_ASSET_STORAGE",
"path": "blender-5.2.0/source/blender/makesdna/DNA_asset_types.h",
"sha256": "de97f44c71d46049b0effdf0fed6aba3f0df72d6d4ba89b88f61e7624d3b9a49"
},
{
"role": "RNA_ASSET_API",
"path": "blender-5.2.0/source/blender/makesrna/intern/rna_asset.cc",
"sha256": "92c9cd5ce718d5b250a02eaefbd1c356a962e2f69b235d23fc97447a9a567a22"
},
{
"role": "ASSET_BLEND_IO",
"path": "blender-5.2.0/source/blender/blenkernel/intern/asset.cc",
"sha256": "eb66d1bfb3efb39cd6c6a6be9e6ff23f2be10a1c427e5b998a2dbcd1ec5b9adc"
},
{
"role": "CATALOG_MODEL",
"path": "blender-5.2.0/source/blender/asset_system/AS_asset_catalog.hh",
"sha256": "6fd93dc78d0634b9c4d0ee03a23d3233be591204aea7957d1b9768b7c3508110"
},
{
"role": "CATALOG_PATH",
"path": "blender-5.2.0/source/blender/asset_system/AS_asset_catalog_path.hh",
"sha256": "9579b74fac1cb3208c96c8aa56b51c9e44d96e3416b718d77270d5f8269bc7b9"
},
{
"role": "CATALOG_FILE_API",
"path": "blender-5.2.0/source/blender/asset_system/intern/asset_catalog_definition_file.hh",
"sha256": "880f5ae42fa6c532d46b70d5264f3ac7f8e8abab8c6cf189a4e8aebdd9dd04b6"
},
{
"role": "CATALOG_FILE_FORMAT",
"path": "blender-5.2.0/source/blender/asset_system/intern/asset_catalog_definition_file.cc",
"sha256": "4316b683125df87e07e4f1116b44f58eb725b654ac9941118a148c08ee916a18"
},
{
"role": "CURRENT_WEB_V1_SNAPSHOT",
"path": "web/protocol/asset-library-io.ts",
"sha256": "5c62539db3833a2113007dfbdfd12ca06704d86e0cf0e57ad97f7fbf6acda7f4"
}
],
"assetTag": {
"fields": [
{
"name": "next",
"cType": "AssetTag*",
"sourceToken": "struct AssetTag *next",
"persistence": "LIST_LINKAGE",
"semantic": "NON_USER_LINKAGE",
"rnaProperty": null
},
{
"name": "prev",
"cType": "AssetTag*",
"sourceToken": "*prev = nullptr",
"persistence": "LIST_LINKAGE",
"semantic": "NON_USER_LINKAGE",
"rnaProperty": null
},
{
"name": "name",
"cType": "char[64]",
"sourceToken": "char name[/*MAX_NAME*/ 64]",
"persistence": "BLEND",
"semantic": "USER_VALUE",
"rnaProperty": "name",
"maximumStorageBytesIncludingNull": 64
}
],
"collectionOperations": ["new", "remove"],
"newSupportsSkipIfExists": true,
"orderIsPersistent": true
},
"assetMetaData": {
"dnaFields": [
{
"name": "local_type_info",
"cType": "AssetTypeInfo*",
"sourceToken": "struct AssetTypeInfo *local_type_info",
"persistence": "RUNTIME_ONLY",
"semantic": "CALLBACK_TYPE",
"rnaProperty": null
},
{
"name": "properties",
"cType": "IDProperty*",
"sourceToken": "struct IDProperty *properties",
"persistence": "BLEND_IDPROPERTY",
"semantic": "CUSTOM_METADATA_NO_ID_POINTERS",
"rnaProperty": "CUSTOM_ID_PROPERTIES"
},
{
"name": "catalog_id",
"cType": "bUUID",
"sourceToken": "struct bUUID catalog_id",
"persistence": "BLEND",
"semantic": "AUTHORITATIVE_CATALOG_ID",
"rnaProperty": "catalog_id"
},
{
"name": "catalog_simple_name",
"cType": "char[64]",
"sourceToken": "char catalog_simple_name[/*MAX_NAME*/ 64]",
"persistence": "BLEND",
"semantic": "RECOVERY_ONLY_NOT_AUTHORITY",
"rnaProperty": "catalog_simple_name"
},
{
"name": "author",
"cType": "char*",
"sourceToken": "char *author = nullptr",
"persistence": "BLEND_DYNAMIC_STRING",
"semantic": "OPTIONAL_DISPLAY_TEXT",
"rnaProperty": "author"
},
{
"name": "description",
"cType": "char*",
"sourceToken": "char *description = nullptr",
"persistence": "BLEND_DYNAMIC_STRING",
"semantic": "OPTIONAL_DISPLAY_TEXT",
"rnaProperty": "description"
},
{
"name": "copyright",
"cType": "char*",
"sourceToken": "char *copyright = nullptr",
"persistence": "BLEND_DYNAMIC_STRING",
"semantic": "OPTIONAL_LEGAL_TEXT",
"rnaProperty": "copyright"
},
{
"name": "license",
"cType": "char*",
"sourceToken": "char *license = nullptr",
"persistence": "BLEND_DYNAMIC_STRING",
"semantic": "OPTIONAL_LEGAL_TEXT",
"rnaProperty": "license"
},
{
"name": "tags",
"cType": "ListBaseT<AssetTag>",
"sourceToken": "ListBaseT<AssetTag> tags",
"persistence": "BLEND_ORDERED_COLLECTION",
"semantic": "FILTER_TOKENS",
"rnaProperty": "tags"
},
{
"name": "active_tag",
"cType": "short",
"sourceToken": "short active_tag = 0",
"persistence": "BLEND",
"semantic": "EDITOR_SELECTION_INDEX",
"rnaProperty": "active_tag"
},
{
"name": "tot_tags",
"cType": "short",
"sourceToken": "short tot_tags = 0",
"persistence": "BLEND_DERIVED_COUNT",
"semantic": "MUST_EQUAL_TAG_LIST_COUNT",
"rnaProperty": null
},
{
"name": "flag",
"cType": "AssetMetaDataFlag",
"sourceToken": "AssetMetaDataFlag flag = {}",
"persistence": "BLEND",
"semantic": "USE_OWN_IMPORT_METHOD_BIT",
"rnaProperty": "use_preferred_import_method"
},
{
"name": "preferred_import_method",
"cType": "eAssetImportMethod",
"sourceToken": "eAssetImportMethod preferred_import_method",
"persistence": "BLEND",
"semantic": "CONDITIONAL_IMPORT_POLICY",
"rnaProperty": "preferred_import_method"
},
{
"name": "_pad",
"cType": "char[4]",
"sourceToken": "char _pad[4] = {}",
"persistence": "ABI_PADDING",
"semantic": "NON_USER_PADDING",
"rnaProperty": null
}
],
"rnaProperties": [
{ "identifier": "author", "type": "STRING", "isReadonly": false, "isRuntime": false },
{ "identifier": "description", "type": "STRING", "isReadonly": false, "isRuntime": false },
{ "identifier": "copyright", "type": "STRING", "isReadonly": false, "isRuntime": false },
{ "identifier": "license", "type": "STRING", "isReadonly": false, "isRuntime": false },
{ "identifier": "tags", "type": "COLLECTION", "isReadonly": true, "isRuntime": false },
{ "identifier": "active_tag", "type": "INT", "isReadonly": false, "isRuntime": false },
{ "identifier": "catalog_id", "type": "STRING", "isReadonly": false, "isRuntime": false },
{ "identifier": "catalog_simple_name", "type": "STRING", "isReadonly": true, "isRuntime": false },
{ "identifier": "use_preferred_import_method", "type": "BOOLEAN", "isReadonly": false, "isRuntime": false },
{ "identifier": "preferred_import_method", "type": "ENUM", "isReadonly": false, "isRuntime": false }
],
"preferredImportMethods": ["LINK", "APPEND", "APPEND_REUSE", "PACK"],
"emptyAuthorDescriptionCopyrightLicenseAreValid": true,
"catalogIdFormat": "RFC4122_UUID_OR_NIL",
"customPropertiesMayNotReferenceDataBlocks": true
},
"catalog": {
"semanticFields": [
{ "name": "catalog_id", "cType": "CatalogID", "sourceToken": "const CatalogID catalog_id", "persistence": "CATALOG_DEFINITION_FILE" },
{ "name": "path", "cType": "AssetCatalogPath", "sourceToken": "AssetCatalogPath path", "persistence": "CATALOG_DEFINITION_FILE" },
{ "name": "simple_name", "cType": "std::string", "sourceToken": "std::string simple_name", "persistence": "CATALOG_DEFINITION_FILE_AND_ASSET_RECOVERY_COPY" }
],
"runtimeFlags": [
{ "name": "is_deleted", "sourceToken": "bool is_deleted = false" },
{ "name": "is_first_loaded", "sourceToken": "bool is_first_loaded = false" },
{ "name": "has_unsaved_changes", "sourceToken": "bool has_unsaved_changes = false" }
],
"definitionFile": {
"defaultFilename": "blender_assets.cats.txt",
"supportedVersion": 1,
"versionMarker": "VERSION ",
"recordFields": ["catalog_id", "path", "simple_name"],
"delimiter": ":",
"writeOrder": ["path", "is_first_loaded", "catalog_id"],
"emptyAndCommentLinesIgnored": true,
"firstSemanticLineMustBeVersion": true
},
"path": {
"encoding": "UTF8_BYTES",
"separator": "/",
"hierarchy": "IMPLICIT_PATH_COMPONENTS",
"leadingSlash": false,
"componentColonAllowed": false,
"cleanup": ["TRIM_COMPONENTS", "REMOVE_EMPTY_COMPONENTS", "REPLACE_INVALID_CHARACTERS"]
},
"identityRules": {
"assetReferenceAuthority": "catalog_id",
"simpleNameAuthority": false,
"parentIdStored": false,
"duplicatePathsAllowed": true,
"duplicatePathSelectionOrder": ["is_first_loaded", "catalog_id"]
}
},
"currentWebSnapshot": {
"assetCatalogIRFields": ["id", "name", "parentId"],
"assetEntryIRFields": ["id", "name", "kind", "catalogId", "tags", "author", "license", "sourceSha256", "sourcePath", "preview"],
"directlyRepresentedMetadata": ["catalog_id", "tags", "author", "license"],
"missingMetadata": ["properties", "description", "copyright", "catalog_simple_name", "active_tag", "use_preferred_import_method", "preferred_import_method"],
"semanticDrift": [
"Blender author and license are optional; Web v1 requires both to be non-empty",
"Blender catalog hierarchy is an implicit cleaned path; Web v1 stores an explicit parentId graph",
"Blender catalog simple_name is recovery metadata; Web v1 name is the only catalog label",
"Blender tag storage is 64 bytes including the terminator; Web v1 bounds JavaScript string length to 64 code units",
"Blender custom ID properties are persisted but Web v1 has no preservation field"
]
},
"nextTask": "M12-01B"
}

View File

@@ -0,0 +1,116 @@
{
"schemaVersion": 1,
"task": "M12-01B",
"enablingTask": true,
"parityStateChange": false,
"blenderVersion": "5.2.0",
"catalogDefinition": {
"fileName": "blender_assets.cats.txt",
"version": 1,
"records": [
{
"catalogId": "11111111-1111-4111-8111-111111111111",
"path": "Characters",
"simpleName": "Characters",
"parentPath": null
},
{
"catalogId": "22222222-2222-4222-8222-222222222222",
"path": "Characters/Heroes",
"simpleName": "Heroes",
"parentPath": "Characters"
},
{
"catalogId": "33333333-3333-4333-8333-333333333333",
"path": "Materials/Metal",
"simpleName": "Metal",
"parentPath": "Materials"
}
]
},
"assets": [
{
"idType": "MATERIAL",
"name": "M12 Brushed Metal",
"catalogId": "33333333-3333-4333-8333-333333333333",
"catalogSimpleName": "",
"author": "",
"description": "",
"copyright": "",
"license": "",
"tags": [
"metal"
],
"activeTag": 0,
"usePreferredImportMethod": false,
"preferredImportMethod": "APPEND",
"customProperties": [
{
"name": "roughness",
"type": "FLOAT",
"value": 0.35
}
]
},
{
"idType": "OBJECT",
"name": "M12 Hero",
"catalogId": "22222222-2222-4222-8222-222222222222",
"catalogSimpleName": "",
"author": "M12 Artist",
"description": "Desktop catalog v1 object fixture",
"copyright": "Copyright 2026 M12 Fixture Authors",
"license": "CC0-1.0",
"tags": [
"character",
"hero",
"rig-ready"
],
"activeTag": 1,
"usePreferredImportMethod": true,
"preferredImportMethod": "APPEND",
"customProperties": [
{
"name": "approved",
"type": "BOOL",
"value": true
},
{
"name": "dimensions",
"type": "IDPROPERTYARRAY",
"value": [
2.0,
2.0,
0.0
]
},
{
"name": "rating",
"type": "INT",
"value": 5
},
{
"name": "source",
"type": "STR",
"value": "M12-01B"
}
]
},
{
"idType": "WORLD",
"name": "M12 Uncataloged World",
"catalogId": "00000000-0000-0000-0000-000000000000",
"catalogSimpleName": "",
"author": "M12 Artist",
"description": "Asset without a catalog assignment",
"copyright": "",
"license": "CC0-1.0",
"tags": [],
"activeTag": 0,
"usePreferredImportMethod": true,
"preferredImportMethod": "LINK",
"customProperties": []
}
],
"nextTask": "M12-01C"
}

View File

@@ -0,0 +1,60 @@
{
"schemaVersion": 1,
"task": "M12-01B",
"parentTask": "M12-01",
"parityId": "N-023-ASSET-CATALOG-SCHEMA",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"blenderVersion": "5.2.0",
"artifacts": {
"generator": {
"path": "tools/web/generate-asset-catalog-v1.py",
"sha256": "4156ec6293562d44f87ad5a268de52fbfa31a65da8263a67a2bc45bf22999307"
},
"exporter": {
"path": "tools/web/export-asset-catalog-v1.py",
"sha256": "3dbccd8df54d8686aa526f7967f58fd1008336c4c5b1deed01a136ba15aa3e41"
},
"checker": {
"path": "tools/web/check-asset-catalog-v1-fixture.mjs",
"sha256": "c2813aa36482eff0b23ca0209f488cfe70ea11e4f39cc6c6036d6c47bbc8e17b"
},
"fixture": {
"path": "tests/files/web/m12_asset_catalog_v1/m12_asset_catalog_v1.blend",
"sha256": "8facfe82e3ca0a0605c139ef5bdcbb82d27a6953a6add4e008b68af90bc1211f"
},
"catalogDefinition": {
"path": "tests/files/web/m12_asset_catalog_v1/blender_assets.cats.txt",
"sha256": "a72f542acb2d2239951a2b20cda0f92305e1d6d8222f84072ad1aab52e3e4c98"
},
"canonicalReport": {
"path": "tests/golden/M12-01B/canonical.json",
"sha256": "6fc6def0b9d0e4f51ef40c1d87a1f17074f6340c126a01aee49e5e53271c961e"
}
},
"coverage": {
"catalogRecords": 3,
"assetRecords": 3,
"assetIdTypes": ["MATERIAL", "OBJECT", "WORLD"],
"metadata": [
"properties",
"catalog_id",
"catalog_simple_name",
"author",
"description",
"copyright",
"license",
"tags",
"active_tag",
"use_preferred_import_method",
"preferred_import_method"
]
},
"nonGoals": [
"Web catalog schema v2",
"Web migration behavior",
"Catalog or asset mutation parity"
],
"nextTask": "M12-01C"
}

View File

@@ -0,0 +1,127 @@
{
"schemaVersion": 2,
"revision": 1,
"catalogs": [
{
"catalogId": "11111111-1111-4111-8111-111111111111",
"path": "Characters",
"simpleName": "Characters",
"parentPath": null
},
{
"catalogId": "22222222-2222-4222-8222-222222222222",
"path": "Characters/Heroes",
"simpleName": "Heroes",
"parentPath": "Characters"
},
{
"catalogId": "33333333-3333-4333-8333-333333333333",
"path": "Materials/Metal",
"simpleName": "Metal",
"parentPath": "Materials"
}
],
"assets": [
{
"assetId": "asset:0ecbd393de19b0cc4fe26956ba658e782aaad4a859b4a9647161f1405ddadfd5",
"assetLibraryIdentifier": null,
"relativeAssetIdentifier": "Material/M12 Brushed Metal",
"idType": "MATERIAL",
"name": "M12 Brushed Metal",
"catalogId": "33333333-3333-4333-8333-333333333333",
"catalogSimpleName": "",
"author": "",
"description": "",
"copyright": "",
"license": "",
"tags": [
"metal"
],
"activeTag": 0,
"usePreferredImportMethod": false,
"preferredImportMethod": "APPEND",
"customProperties": [
{
"name": "roughness",
"type": "FLOAT",
"value": 0.35
}
],
"sourceSha256": null,
"sourcePath": null,
"preview": null
},
{
"assetId": "asset:4e9e5a3755581b0f3b604748fc5c64f4f51f14b5c2efd485a7093edeae4dbabd",
"assetLibraryIdentifier": null,
"relativeAssetIdentifier": "Object/M12 Hero",
"idType": "OBJECT",
"name": "M12 Hero",
"catalogId": "22222222-2222-4222-8222-222222222222",
"catalogSimpleName": "",
"author": "M12 Artist",
"description": "Desktop catalog v1 object fixture",
"copyright": "Copyright 2026 M12 Fixture Authors",
"license": "CC0-1.0",
"tags": [
"character",
"hero",
"rig-ready"
],
"activeTag": 1,
"usePreferredImportMethod": true,
"preferredImportMethod": "APPEND",
"customProperties": [
{
"name": "approved",
"type": "BOOL",
"value": true
},
{
"name": "dimensions",
"type": "FLOAT_ARRAY",
"value": [
2,
2,
0
]
},
{
"name": "rating",
"type": "INT",
"value": 5
},
{
"name": "source",
"type": "STRING",
"value": "M12-01B"
}
],
"sourceSha256": null,
"sourcePath": null,
"preview": null
},
{
"assetId": "asset:7ef9ef809269e187e988effca992a2249e6340bd65bba2da2c4b2545c8a7bd8c",
"assetLibraryIdentifier": null,
"relativeAssetIdentifier": "World/M12 Uncataloged World",
"idType": "WORLD",
"name": "M12 Uncataloged World",
"catalogId": null,
"catalogSimpleName": "",
"author": "M12 Artist",
"description": "Asset without a catalog assignment",
"copyright": "",
"license": "CC0-1.0",
"tags": [],
"activeTag": 0,
"usePreferredImportMethod": true,
"preferredImportMethod": "LINK",
"customProperties": [],
"sourceSha256": null,
"sourcePath": null,
"preview": null
}
],
"libraries": []
}

View File

@@ -0,0 +1,45 @@
{
"schemaVersion": 1,
"task": "M12-01C",
"parentTask": "M12-01",
"parityId": "N-023-ASSET-CATALOG-SCHEMA",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"blenderVersion": "5.2.0",
"identityContract": {
"catalog": "CANONICAL_RFC4122_UUID",
"asset": "SHA256_OF_BLENDER_ASSET_WEAK_REFERENCE_V1",
"renameBehavior": "RELATIVE_IDENTIFIER_AND_ASSET_ID_CHANGE_TO_MATCH_BLENDER",
"catalogHierarchy": "CLEANED_SLASH_PATH"
},
"artifacts": {
"protocol": {
"path": "web/protocol/asset-catalog-v2.ts",
"sha256": "0949838efb2f69466368185b80bb1d2e851672d78311fcd5270eb0814576e5d7"
},
"generator": {
"path": "tools/web/generate-asset-catalog-v2.mjs",
"sha256": "b20e7dbd8508ca8ecf17d7da507b45b1225315bac7759c55c7b324683d660881"
},
"desktopCanonical": {
"path": "tests/golden/M12-01B/canonical.json",
"sha256": "6fc6def0b9d0e4f51ef40c1d87a1f17074f6340c126a01aee49e5e53271c961e"
},
"schemaGolden": {
"path": "tests/golden/M12-01C/asset-catalog-v2.json",
"sha256": "2abe279cebbffd1341dc61b1fdc5366dd1f6f42769ba36171782019ca61fb929"
},
"blenderWeakReferenceSource": {
"path": "blender-5.2.0/source/blender/asset_system/intern/asset_representation.cc",
"sha256": "ace3d6468bcdb2f6190431e967495794b7afa35758fd82fc3941b1ce7d374635"
}
},
"nonGoals": [
"Schema v1 to v2 migration",
"Schema v2 legacy-reader policy",
"IndexedDB migration",
"Catalog mutation parity"
],
"nextTask": "M12-01D"
}

View File

@@ -0,0 +1,58 @@
{
"schemaVersion": 1,
"revision": 7,
"catalogs": [
{ "id": "catalog:root", "name": "Characters", "parentId": null },
{ "id": "catalog:heroes", "name": "Heroes", "parentId": "catalog:root" },
{ "id": "44444444-4444-4444-8444-444444444444", "name": "Animation", "parentId": null }
],
"assets": [
{
"id": "legacy:hero",
"name": "Legacy Hero",
"kind": "OBJECT",
"catalogId": "catalog:heroes",
"tags": ["character", "hero"],
"author": "M12 Artist",
"license": "CC0-1.0",
"sourceSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"sourcePath": "assets/legacy-hero.blend",
"preview": {
"assetId": "legacy:hero",
"sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"mimeType": "image/png",
"width": 64,
"height": 64,
"byteLength": 4096
}
},
{
"id": "legacy:walk",
"name": "Legacy Walk",
"kind": "ACTION",
"catalogId": "44444444-4444-4444-8444-444444444444",
"tags": ["walk"],
"author": "M12 Artist",
"license": "CC-BY-4.0",
"sourceSha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
}
],
"libraries": [
{
"id": "library:characters",
"name": "Characters",
"sourcePath": "libraries/characters.blend",
"sourceSha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"dependencyIds": ["library:materials"],
"readOnly": true
},
{
"id": "library:materials",
"name": "Materials",
"sourcePath": "libraries/materials.blend",
"sourceSha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"dependencyIds": [],
"readOnly": true
}
]
}

View File

@@ -0,0 +1,99 @@
{
"schemaVersion": 2,
"revision": 7,
"catalogs": [
{
"catalogId": "44444444-4444-4444-8444-444444444444",
"path": "Animation",
"simpleName": "Animation",
"parentPath": null
},
{
"catalogId": "fe3ca14c-95d7-549f-a13b-1bb4c07b6074",
"path": "Characters",
"simpleName": "Characters",
"parentPath": null
},
{
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab",
"path": "Characters/Heroes",
"simpleName": "Heroes",
"parentPath": "Characters"
}
],
"assets": [
{
"assetId": "asset:ac88c6147ada877adccf4df8ca54d64e1a9cb50a13514212f6d19b1da1660f8d",
"assetLibraryIdentifier": null,
"relativeAssetIdentifier": "Action/Legacy Walk",
"idType": "ACTION",
"name": "Legacy Walk",
"catalogId": "44444444-4444-4444-8444-444444444444",
"catalogSimpleName": "Animation",
"author": "M12 Artist",
"description": "",
"copyright": "",
"license": "CC-BY-4.0",
"tags": [
"walk"
],
"activeTag": 0,
"usePreferredImportMethod": false,
"preferredImportMethod": "APPEND",
"customProperties": [],
"sourceSha256": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"sourcePath": null,
"preview": null
},
{
"assetId": "asset:bb91ef0dddf69bb7d87dd4217a01e7f549b50ad628db0367d3896c6840b3a326",
"assetLibraryIdentifier": null,
"relativeAssetIdentifier": "Object/Legacy Hero",
"idType": "OBJECT",
"name": "Legacy Hero",
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab",
"catalogSimpleName": "Heroes",
"author": "M12 Artist",
"description": "",
"copyright": "",
"license": "CC0-1.0",
"tags": [
"character",
"hero"
],
"activeTag": 0,
"usePreferredImportMethod": false,
"preferredImportMethod": "APPEND",
"customProperties": [],
"sourceSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"sourcePath": "assets/legacy-hero.blend",
"preview": {
"sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"mimeType": "image/png",
"width": 64,
"height": 64,
"byteLength": 4096
}
}
],
"libraries": [
{
"libraryId": "library:characters",
"name": "Characters",
"sourcePath": "libraries/characters.blend",
"sourceSha256": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
"dependencyIds": [
"library:materials"
],
"readOnly": true
},
{
"libraryId": "library:materials",
"name": "Materials",
"sourcePath": "libraries/materials.blend",
"sourceSha256": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"dependencyIds": [],
"readOnly": true
}
]
}

View File

@@ -0,0 +1,44 @@
{
"schemaVersion": 1,
"task": "M12-01D",
"parentTask": "M12-01",
"parityId": "N-023-ASSET-CATALOG-SCHEMA",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"migration": {
"sourceSchemaVersion": 1,
"targetSchemaVersion": 2,
"catalogIdMapping": "RFC4122_UUIDV5_FIXED_NAMESPACE",
"assetIdMapping": "BLENDER_ASSET_WEAK_REFERENCE_V1_SHA256",
"revisionPolicy": "PRESERVE",
"unknownFieldPolicy": "BLOCK_BEFORE_MIGRATION"
},
"artifacts": {
"migrationProtocol": {
"path": "web/protocol/asset-catalog-migration.ts",
"sha256": "6d74bc5605f94e05208eda82830192d38f88066dfc409058555a8876c785f226"
},
"targetProtocol": {
"path": "web/protocol/asset-catalog-v2.ts",
"sha256": "0949838efb2f69466368185b80bb1d2e851672d78311fcd5270eb0814576e5d7"
},
"generator": {
"path": "tools/web/generate-asset-catalog-migration.mjs",
"sha256": "954d15c02d68e3f644b57c8c4c136ce09bd037a0af2012bf74b97f681c77dd60"
},
"sourceFixture": {
"path": "tests/golden/M12-01D/catalog-v1.json",
"sha256": "1cc43d181afefd63b53cb9c3626bb58195fad20187d6e534adc1ecbe65f75da5"
},
"targetFixture": {
"path": "tests/golden/M12-01D/catalog-v2.json",
"sha256": "38e5d1771b3d2d63ce5e10268eac4513f2043b0cbf71ab1799c1868bc2aa97fb"
},
"migrationReport": {
"path": "tests/golden/M12-01D/migration-report.json",
"sha256": "57b972c1bbb9ae326c3f264c225c21546682442ff3194fbc343e1c46a2cd410a"
}
},
"nextTask": "M12-01E"
}

View File

@@ -0,0 +1,53 @@
{
"schemaVersion": 1,
"task": "M12-01D",
"status": "MIGRATED",
"sourceSchemaVersion": 1,
"targetSchemaVersion": 2,
"sourceRevision": 7,
"targetRevision": 7,
"sourceManifestSha256": "cbdc8b03dc9ce1f38b44bae1c7459eb273126cbd6c7dd33115d2b1966e975881",
"targetManifestSha256": "0c08ed1af1dd0998c809f76d969fd21d8fdae28ad37cf5571bdc99b16bf3ec90",
"catalogMappings": [
{
"legacyId": "44444444-4444-4444-8444-444444444444",
"catalogId": "44444444-4444-4444-8444-444444444444",
"path": "Animation"
},
{
"legacyId": "catalog:heroes",
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab",
"path": "Characters/Heroes"
},
{
"legacyId": "catalog:root",
"catalogId": "fe3ca14c-95d7-549f-a13b-1bb4c07b6074",
"path": "Characters"
}
],
"assetMappings": [
{
"legacyId": "legacy:hero",
"assetId": "asset:bb91ef0dddf69bb7d87dd4217a01e7f549b50ad628db0367d3896c6840b3a326",
"relativeAssetIdentifier": "Object/Legacy Hero"
},
{
"legacyId": "legacy:walk",
"assetId": "asset:ac88c6147ada877adccf4df8ca54d64e1a9cb50a13514212f6d19b1da1660f8d",
"relativeAssetIdentifier": "Action/Legacy Walk"
}
],
"defaultsApplied": {
"dynamicMetadataFields": 4,
"preferredImportMethods": 2,
"customPropertyCollections": 2
},
"preserved": {
"catalogs": 3,
"assets": 2,
"libraries": 2,
"previews": 1,
"sourceBindings": 2
},
"nextTask": "M12-01E"
}

View File

@@ -0,0 +1,255 @@
{
"read": {
"schemaVersion": 1,
"task": "M12-01E",
"readerSchemaVersion": 1,
"documentSchemaVersion": 2,
"operation": "READ",
"status": "READ_ONLY",
"code": "ASSET_SCHEMA_DOWNGRADE_BLOCKED",
"recoverable": true,
"sourceSha256": "0c08ed1af1dd0998c809f76d969fd21d8fdae28ad37cf5571bdc99b16bf3ec90",
"snapshot": {
"revision": 7,
"catalogs": [
{
"catalogId": "44444444-4444-4444-8444-444444444444",
"path": "Animation",
"simpleName": "Animation"
},
{
"catalogId": "fe3ca14c-95d7-549f-a13b-1bb4c07b6074",
"path": "Characters",
"simpleName": "Characters"
},
{
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab",
"path": "Characters/Heroes",
"simpleName": "Heroes"
}
],
"assets": [
{
"assetId": "asset:ac88c6147ada877adccf4df8ca54d64e1a9cb50a13514212f6d19b1da1660f8d",
"relativeAssetIdentifier": "Action/Legacy Walk",
"idType": "ACTION",
"name": "Legacy Walk",
"catalogId": "44444444-4444-4444-8444-444444444444"
},
{
"assetId": "asset:bb91ef0dddf69bb7d87dd4217a01e7f549b50ad628db0367d3896c6840b3a326",
"relativeAssetIdentifier": "Object/Legacy Hero",
"idType": "OBJECT",
"name": "Legacy Hero",
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab"
}
],
"libraries": [
{
"libraryId": "library:characters",
"name": "Characters",
"readOnly": true
},
{
"libraryId": "library:materials",
"name": "Materials",
"readOnly": true
}
]
},
"nextTask": "M12-01F"
},
"catalogWrite": {
"schemaVersion": 1,
"task": "M12-01E",
"readerSchemaVersion": 1,
"documentSchemaVersion": 2,
"operation": "CATALOG_WRITE",
"status": "BLOCKED",
"code": "ASSET_SCHEMA_DOWNGRADE_BLOCKED",
"recoverable": true,
"sourceSha256": "0c08ed1af1dd0998c809f76d969fd21d8fdae28ad37cf5571bdc99b16bf3ec90",
"snapshot": {
"revision": 7,
"catalogs": [
{
"catalogId": "44444444-4444-4444-8444-444444444444",
"path": "Animation",
"simpleName": "Animation"
},
{
"catalogId": "fe3ca14c-95d7-549f-a13b-1bb4c07b6074",
"path": "Characters",
"simpleName": "Characters"
},
{
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab",
"path": "Characters/Heroes",
"simpleName": "Heroes"
}
],
"assets": [
{
"assetId": "asset:ac88c6147ada877adccf4df8ca54d64e1a9cb50a13514212f6d19b1da1660f8d",
"relativeAssetIdentifier": "Action/Legacy Walk",
"idType": "ACTION",
"name": "Legacy Walk",
"catalogId": "44444444-4444-4444-8444-444444444444"
},
{
"assetId": "asset:bb91ef0dddf69bb7d87dd4217a01e7f549b50ad628db0367d3896c6840b3a326",
"relativeAssetIdentifier": "Object/Legacy Hero",
"idType": "OBJECT",
"name": "Legacy Hero",
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab"
}
],
"libraries": [
{
"libraryId": "library:characters",
"name": "Characters",
"readOnly": true
},
{
"libraryId": "library:materials",
"name": "Materials",
"readOnly": true
}
]
},
"nextTask": "M12-01F"
},
"assetWrite": {
"schemaVersion": 1,
"task": "M12-01E",
"readerSchemaVersion": 1,
"documentSchemaVersion": 2,
"operation": "ASSET_WRITE",
"status": "BLOCKED",
"code": "ASSET_SCHEMA_DOWNGRADE_BLOCKED",
"recoverable": true,
"sourceSha256": "0c08ed1af1dd0998c809f76d969fd21d8fdae28ad37cf5571bdc99b16bf3ec90",
"snapshot": {
"revision": 7,
"catalogs": [
{
"catalogId": "44444444-4444-4444-8444-444444444444",
"path": "Animation",
"simpleName": "Animation"
},
{
"catalogId": "fe3ca14c-95d7-549f-a13b-1bb4c07b6074",
"path": "Characters",
"simpleName": "Characters"
},
{
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab",
"path": "Characters/Heroes",
"simpleName": "Heroes"
}
],
"assets": [
{
"assetId": "asset:ac88c6147ada877adccf4df8ca54d64e1a9cb50a13514212f6d19b1da1660f8d",
"relativeAssetIdentifier": "Action/Legacy Walk",
"idType": "ACTION",
"name": "Legacy Walk",
"catalogId": "44444444-4444-4444-8444-444444444444"
},
{
"assetId": "asset:bb91ef0dddf69bb7d87dd4217a01e7f549b50ad628db0367d3896c6840b3a326",
"relativeAssetIdentifier": "Object/Legacy Hero",
"idType": "OBJECT",
"name": "Legacy Hero",
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab"
}
],
"libraries": [
{
"libraryId": "library:characters",
"name": "Characters",
"readOnly": true
},
{
"libraryId": "library:materials",
"name": "Materials",
"readOnly": true
}
]
},
"nextTask": "M12-01F"
},
"save": {
"schemaVersion": 1,
"task": "M12-01E",
"readerSchemaVersion": 1,
"documentSchemaVersion": 2,
"operation": "SAVE",
"status": "BLOCKED",
"code": "ASSET_SCHEMA_DOWNGRADE_BLOCKED",
"recoverable": true,
"sourceSha256": "0c08ed1af1dd0998c809f76d969fd21d8fdae28ad37cf5571bdc99b16bf3ec90",
"snapshot": {
"revision": 7,
"catalogs": [
{
"catalogId": "44444444-4444-4444-8444-444444444444",
"path": "Animation",
"simpleName": "Animation"
},
{
"catalogId": "fe3ca14c-95d7-549f-a13b-1bb4c07b6074",
"path": "Characters",
"simpleName": "Characters"
},
{
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab",
"path": "Characters/Heroes",
"simpleName": "Heroes"
}
],
"assets": [
{
"assetId": "asset:ac88c6147ada877adccf4df8ca54d64e1a9cb50a13514212f6d19b1da1660f8d",
"relativeAssetIdentifier": "Action/Legacy Walk",
"idType": "ACTION",
"name": "Legacy Walk",
"catalogId": "44444444-4444-4444-8444-444444444444"
},
{
"assetId": "asset:bb91ef0dddf69bb7d87dd4217a01e7f549b50ad628db0367d3896c6840b3a326",
"relativeAssetIdentifier": "Object/Legacy Hero",
"idType": "OBJECT",
"name": "Legacy Hero",
"catalogId": "b4bb3608-9267-5aba-bb9e-9e97b006d5ab"
}
],
"libraries": [
{
"libraryId": "library:characters",
"name": "Characters",
"readOnly": true
},
{
"libraryId": "library:materials",
"name": "Materials",
"readOnly": true
}
]
},
"nextTask": "M12-01F"
},
"future": {
"schemaVersion": 1,
"task": "M12-01E",
"readerSchemaVersion": 1,
"documentSchemaVersion": 3,
"operation": "READ",
"status": "BLOCKED",
"code": "PROTOCOL_MISMATCH",
"recoverable": false,
"sourceSha256": "d6b7646f6ede911358f954a0ccae376703f1c0e8854a9953a4a77a968b600b80",
"snapshot": null,
"nextTask": "M12-01F"
}
}

View File

@@ -0,0 +1,39 @@
{
"schemaVersion": 1,
"task": "M12-01E",
"parentTask": "M12-01",
"parityId": "N-023-ASSET-CATALOG-SCHEMA",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"policy": {
"nativeV1": "READY",
"validV2Read": "READ_ONLY",
"validV2Write": "ASSET_SCHEMA_DOWNGRADE_BLOCKED",
"futureSchema": "PROTOCOL_MISMATCH",
"sourceMutation": "FORBIDDEN"
},
"artifacts": {
"protocol": {
"path": "web/protocol/asset-catalog-compatibility.ts",
"sha256": "5d51029b232e03f08fc0778d4933910b2a54818b4d653fbcc185c8d764641349"
},
"errorContract": {
"path": "web/protocol/error.ts",
"sha256": "309ab84d5c755a69466ddb73e4b54e87caf62cbcac0f10f34d904e9f6f4a5f34"
},
"generator": {
"path": "tools/web/generate-asset-catalog-compatibility.mjs",
"sha256": "208f568db092e1712095d77ab28db92d5a1eb11fe62813b237ce466f9268fd4e"
},
"v2Fixture": {
"path": "tests/golden/M12-01D/catalog-v2.json",
"sha256": "38e5d1771b3d2d63ce5e10268eac4513f2043b0cbf71ab1799c1868bc2aa97fb"
},
"compatibilityReport": {
"path": "tests/golden/M12-01E/compatibility-report.json",
"sha256": "3c2f9241b56ad5bd742dc4152dec703bdc56eef4e6d8d60e6edf163c4571ad54"
}
},
"nextTask": "M12-01F"
}

View File

@@ -0,0 +1,33 @@
{
"schemaVersion": 1,
"task": "M12-01F",
"parentTask": "M12-01",
"parityId": "N-023-ASSET-CATALOG-SCHEMA",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"negativeCaseCount": 9,
"artifacts": {
"schemaProtocol": {
"path": "web/protocol/asset-catalog-v2.ts",
"sha256": "0949838efb2f69466368185b80bb1d2e851672d78311fcd5270eb0814576e5d7"
},
"migrationProtocol": {
"path": "web/protocol/asset-catalog-migration.ts",
"sha256": "6d74bc5605f94e05208eda82830192d38f88066dfc409058555a8876c785f226"
},
"v1Fixture": {
"path": "tests/golden/M12-01D/catalog-v1.json",
"sha256": "1cc43d181afefd63b53cb9c3626bb58195fad20187d6e534adc1ecbe65f75da5"
},
"v2Fixture": {
"path": "tests/golden/M12-01D/catalog-v2.json",
"sha256": "38e5d1771b3d2d63ce5e10268eac4513f2043b0cbf71ab1799c1868bc2aa97fb"
},
"negativeCases": {
"path": "tests/golden/M12-01F/negative-cases.json",
"sha256": "74672fa0aec248fd5d9a265743ef4dfe4d417fce8a24622b8b3d6be2f95c8874"
}
},
"nextTask": "M12-01G"
}

View File

@@ -0,0 +1,17 @@
{
"schemaVersion": 1,
"task": "M12-01F",
"cases": [
{ "id": "DUPLICATE_CATALOG_ID", "code": "ASSET_MANIFEST_INVALID" },
{ "id": "DUPLICATE_ASSET_ID", "code": "ASSET_MANIFEST_INVALID" },
{ "id": "LEGACY_PARENT_CYCLE", "code": "ASSET_MANIFEST_INVALID" },
{ "id": "PARENT_PATH_MISMATCH", "code": "ASSET_MANIFEST_INVALID" },
{ "id": "OVERLONG_SIMPLE_NAME_UTF8", "code": "ASSET_BUDGET_EXCEEDED" },
{ "id": "OVERLONG_TAG_UTF8", "code": "ASSET_BUDGET_EXCEEDED" },
{ "id": "V2_UNKNOWN_TOP_LEVEL", "code": "ASSET_MANIFEST_INVALID" },
{ "id": "V2_UNKNOWN_ASSET_FIELD", "code": "ASSET_MANIFEST_INVALID" },
{ "id": "V1_UNKNOWN_ASSET_FIELD", "code": "ASSET_MANIFEST_INVALID" }
],
"recovery": "VALID_V2_AFTER_EACH_NEGATIVE",
"nextTask": "M12-01G"
}

View File

@@ -0,0 +1,40 @@
{
"schemaVersion": 1,
"task": "M12-01G",
"parentTask": "M12-01",
"parityId": "N-023-ASSET-CATALOG-SCHEMA",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"transaction": {
"sourceRow": "asset-catalog:index:v1",
"targetRow": "asset-catalog:index:v2",
"receiptRow": "asset-catalog:migration:v1-to-v2",
"faultPoints": ["AFTER_TARGET_PUT", "AFTER_SOURCE_DELETE"],
"failureCode": "STORAGE_TRANSACTION",
"rollbackPolicy": "PRESERVE_SOURCE_TARGET_RECEIPT_AND_UNRELATED_ROWS"
},
"artifacts": {
"indexedDBMigration": {
"path": "web/app/src/storage/asset-catalog-indexeddb.ts",
"sha256": "283a08bccb5ea301bd2aef8f01d4496972e3962f75e340479336c50e3539ba57"
},
"browserSuite": {
"path": "web/tests/e2e/asset-catalog-indexeddb-migration.spec.ts",
"sha256": "82c40f38898277b4053a9654537ec9c21bc01a784d1091831e139361575a81e9"
},
"sourceFixture": {
"path": "tests/golden/M12-01D/catalog-v1.json",
"sha256": "1cc43d181afefd63b53cb9c3626bb58195fad20187d6e534adc1ecbe65f75da5"
},
"targetFixture": {
"path": "tests/golden/M12-01D/catalog-v2.json",
"sha256": "38e5d1771b3d2d63ce5e10268eac4513f2043b0cbf71ab1799c1868bc2aa97fb"
},
"migrationReport": {
"path": "tests/golden/M12-01D/migration-report.json",
"sha256": "57b972c1bbb9ae326c3f264c225c21546682442ff3194fbc343e1c46a2cd410a"
}
},
"nextTask": "M12-01H"
}

View File

@@ -0,0 +1,43 @@
{
"schemaVersion": 1,
"task": "M12-01H",
"parentTask": "M12-01",
"parityId": "N-023-ASSET-CATALOG-SCHEMA",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"restart": {
"contexts": ["INITIAL_PAGE", "RELOADED_PAGE", "WORKER_GENERATION_1", "WORKER_GENERATION_2"],
"catalogCount": 3,
"assetCount": 2,
"manifestSha256": "0c08ed1af1dd0998c809f76d969fd21d8fdae28ad37cf5571bdc99b16bf3ec90",
"catalogOrder": [
"44444444-4444-4444-8444-444444444444",
"fe3ca14c-95d7-549f-a13b-1bb4c07b6074",
"b4bb3608-9267-5aba-bb9e-9e97b006d5ab"
],
"assetOrder": [
"asset:ac88c6147ada877adccf4df8ca54d64e1a9cb50a13514212f6d19b1da1660f8d",
"asset:bb91ef0dddf69bb7d87dd4217a01e7f549b50ad628db0367d3896c6840b3a326"
]
},
"artifacts": {
"indexedDBReader": {
"path": "web/app/src/storage/asset-catalog-indexeddb.ts",
"sha256": "283a08bccb5ea301bd2aef8f01d4496972e3962f75e340479336c50e3539ba57"
},
"restartWorker": {
"path": "web/app/src/workers/asset-catalog-restart-test.worker.ts",
"sha256": "e6007d352555be046b89d0becd719692652ee0418cc97087bf7599155f2a538e"
},
"browserSuite": {
"path": "web/tests/e2e/asset-catalog-restart.spec.ts",
"sha256": "7945ff38dd474a74c265594b66534a280eb69407509137e60d41f1bea3b3c19b"
},
"targetFixture": {
"path": "tests/golden/M12-01D/catalog-v2.json",
"sha256": "38e5d1771b3d2d63ce5e10268eac4513f2043b0cbf71ab1799c1868bc2aa97fb"
}
},
"nextTask": "M12-01I"
}

View File

@@ -0,0 +1,98 @@
{
"schemaVersion": 1,
"task": "M12-02A",
"parentTask": "M12-02",
"parityId": "N-023-ASSET-PREVIEW",
"enablingTask": true,
"parityStateChange": false,
"blenderVersion": "5.2.0",
"sources": [
{ "role": "PREVIEW_DNA", "path": "blender-5.2.0/source/blender/makesdna/DNA_ID.h", "sha256": "27d0eac02df737f2d2298eeef45e66eae0d76da66542ccdf32400b3e9bd904a9" },
{ "role": "PREVIEW_SLOT_ENUM", "path": "blender-5.2.0/source/blender/makesdna/DNA_ID_enums.h", "sha256": "9b97042ca408924c2efa92b49bc44a4f2f949b11768fb89b2c1b71c9c796cd61" },
{ "role": "PREVIEW_API", "path": "blender-5.2.0/source/blender/blenkernel/BKE_preview_image.hh", "sha256": "25656ad3ef44bb6d00b6e6f9748d26fd04a358d7bb9f876da4194c05d1e5a9a1" },
{ "role": "PREVIEW_IMPLEMENTATION", "path": "blender-5.2.0/source/blender/blenkernel/intern/preview_image.cc", "sha256": "886ae47b7f4950b7b3dc558ac1973c0b114a265d837aa130e4479dd8b438db86" },
{ "role": "PREVIEW_RNA", "path": "blender-5.2.0/source/blender/makesrna/intern/rna_ID.cc", "sha256": "d97b3346a3d36e5198989087cbb6a24f43d9d6d535a6f795392a47f77ccdfc2c" },
{ "role": "ASSET_PREVIEW_GENERATOR", "path": "blender-5.2.0/source/blender/editors/asset/intern/asset_ops.cc", "sha256": "94ae9ce907d1060b3f4dc7536ddd66590efb8e1680bf7d3dc72ce1ce53523732" },
{ "role": "PREVIEW_BLEND_READER", "path": "blender-5.2.0/source/blender/blenloader/intern/readblenentry.cc", "sha256": "dd10bdbdd5f42a09722411e8b99ce34749186d256e91413b7cb5bdef422b8cde" },
{ "role": "PREVIEW_SIZE_CONSTANTS", "path": "blender-5.2.0/source/blender/imbuf/IMB_thumbs.hh", "sha256": "c7d5ddf7c3fbbdd731eac7f0761cada3e8e0df024d8d2c7b48d777e517761be1" },
{ "role": "ICON_SIZE_CONSTANTS", "path": "blender-5.2.0/source/blender/blenkernel/BKE_icons.hh", "sha256": "c16c52503a2fe2e5df9c2925b04d6ce64468cf2c5d98fd85e0e47423cfc9d2aa" },
{ "role": "CURRENT_WEB_V1", "path": "web/protocol/asset-library-io.ts", "sha256": "5c62539db3833a2113007dfbdfd12ca06704d86e0cf0e57ad97f7fbf6acda7f4" },
{ "role": "CURRENT_WEB_V2", "path": "web/protocol/asset-catalog-v2.ts", "sha256": "0949838efb2f69466368185b80bb1d2e851672d78311fcd5270eb0814576e5d7" }
],
"fixtures": [
{ "role": "LOADED_RGBA8_PNG", "path": "tests/files/web/media/sequencer-frame.png", "sha256": "295b083db2299ab904947eb39c17173de70c211882b0d855537d8f3cc27698ed" },
{ "role": "ASSET_NO_PREVIEW_BLEND", "path": "tests/files/web/m12_asset_catalog_v1/m12_asset_catalog_v1.blend", "sha256": "8facfe82e3ca0a0605c139ef5bdcbb82d27a6953a6add4e008b68af90bc1211f" }
],
"storage": {
"slotCount": 2,
"slots": [
{ "index": 0, "name": "ICON", "defaultRenderMaxHeight": 32 },
{ "index": 1, "name": "PREVIEW", "defaultRenderMaxHeight": 128, "customAssetMaxHeight": 256 }
],
"fields": [
{ "name": "w", "cType": "unsigned int[2]", "persistence": "BLEND", "semantic": "PIXEL_WIDTH" },
{ "name": "h", "cType": "unsigned int[2]", "persistence": "BLEND", "semantic": "PIXEL_HEIGHT" },
{ "name": "flag", "cType": "short[2]", "persistence": "BLEND_WITH_RUNTIME_BITS_CLEARED", "semantic": "CHANGED_USER_EDITED_RENDERING" },
{ "name": "changed_timestamp", "cType": "short[2]", "persistence": "BLEND", "semantic": "CHANGE_COUNTER" },
{ "name": "rect", "cType": "unsigned int*[2]", "persistence": "BLEND_ARRAY", "semantic": "ONE_PACKED_RGBA32_VALUE_PER_PIXEL" },
{ "name": "runtime", "cType": "PreviewImageRuntime*", "persistence": "RUNTIME_ONLY", "semantic": "GPU_DEFERRED_LOADING_AND_USER_COUNT" }
],
"pixelFormat": "RGBA8_PACKED_UINT32",
"byteComponents": 4,
"alphaMode": "PREMULTIPLIED",
"colorSpace": null,
"colorSpaceFinding": "NO_COLOR_SPACE_FIELD_OR_RNA_PROPERTY; BYTE_BUFFER_INTERPRETATION_DEPENDS_ON_PRODUCER_PIPELINE"
},
"rna": {
"idProperty": { "identifier": "preview", "type": "POINTER", "readOnly": true, "nullWhenAbsent": true },
"imagePreviewProperties": [
{ "identifier": "is_image_custom", "type": "BOOLEAN", "readOnly": false, "arrayLength": 0 },
{ "identifier": "image_size", "type": "INT", "readOnly": false, "arrayLength": 2 },
{ "identifier": "image_pixels", "type": "INT", "readOnly": false, "arrayLength": 0 },
{ "identifier": "image_pixels_float", "type": "FLOAT", "readOnly": false, "arrayLength": 0 },
{ "identifier": "is_icon_custom", "type": "BOOLEAN", "readOnly": false, "arrayLength": 0 },
{ "identifier": "icon_size", "type": "INT", "readOnly": false, "arrayLength": 2 },
{ "identifier": "icon_pixels", "type": "INT", "readOnly": false, "arrayLength": 0 },
{ "identifier": "icon_pixels_float", "type": "FLOAT", "readOnly": false, "arrayLength": 0 },
{ "identifier": "icon_id", "type": "INT", "readOnly": true, "arrayLength": 0 }
],
"lengthRules": {
"packedPixels": "width*height",
"floatComponents": "width*height*4",
"floatConversion": "BYTE_COMPONENT_DIVIDED_BY_255_WITHOUT_COLOR_TRANSFORM"
}
},
"runtimeStates": {
"noPreview": {
"state": "ABSENT_POINTER",
"assetCount": 3,
"assetTypes": ["Object", "Material", "World"],
"previewValues": [null, null, null]
},
"loadedPreview": {
"sourceSize": [8, 8],
"imageSize": [8, 8],
"iconSize": [32, 32],
"imagePackedPixelCount": 64,
"imageFloatComponentCount": 256,
"iconPackedPixelCount": 1024,
"imageCustom": false,
"iconCustom": false
},
"emptyBufferRule": "NULL_RECT_OR_ZERO_WIDTH_OR_ZERO_HEIGHT_IS_NO_IMAGE_FOR_THAT_SLOT",
"invalidDeferredRule": "RUNTIME_TAG_ONLY_NOT_A_PERSISTED_COLOR_OR_CONTENT_IDENTITY"
},
"currentWeb": {
"v1Fields": ["assetId", "sha256", "mimeType", "width", "height", "byteLength"],
"v2Fields": ["sha256", "mimeType", "width", "height", "byteLength"],
"noPreviewRepresentation": { "v1": "OPTIONAL_PROPERTY_ABSENT", "v2": "NULL" },
"missingSemantics": ["slot", "colorSpace", "alphaMode", "sourceSha256", "generatorIdentity", "deferredOrInvalidState"]
},
"nonGoals": [
"Preview content identity schema",
"Decode budgets",
"OPFS commit ordering",
"Browser display parity"
],
"nextTask": "M12-02B"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"assetId": "asset:4e9e5a3755581b0f3b604748fc5c64f4f51f14b5c2efd485a7093edeae4dbabd",
"slot": "PREVIEW",
"source": {
"mimeType": "image/png",
"byteLength": 261,
"sha256": "295b083db2299ab904947eb39c17173de70c211882b0d855537d8f3cc27698ed"
},
"content": {
"mimeType": "image/png",
"byteLength": 513,
"sha256": "ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7",
"width": 8,
"height": 8,
"pixelFormat": "RGBA8",
"colorSpace": "SRGB",
"alphaMode": "STRAIGHT"
},
"generator": {
"name": "BLENDER_ASSET_PREVIEW_IDENTITY",
"version": "5.2.0",
"executableSha256": "d4483926610484ef9c2ad9241aae1469f934d955ebe791f1920e263e0ba85b82",
"scriptSha256": "753a26be90f7d97828737ebc3a4ab88275a7c655b4f9992406c7c35fba6535ce",
"settingsSha256": "07ebc55d4b6cbb293badf0640874846912df3d23549997cf6f87f4c325280ca0"
},
"identitySha256": "3139b1df11615fd8c7caaf920a0ba2c93e8921d999374876a2c65d889d256e5f"
}

View File

@@ -0,0 +1,31 @@
{
"schemaVersion": 1,
"task": "M12-02B",
"parentTask": "M12-02",
"parityId": "N-023-ASSET-PREVIEW",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"generatorSettings": {
"schemaVersion": 1,
"format": "PNG",
"colorMode": "RGBA",
"colorDepth": 8,
"compression": 0,
"displayDevice": "sRGB",
"viewTransform": "Standard",
"look": "None",
"exposure": 0,
"gamma": 1
},
"generatorSettingsSha256": "07ebc55d4b6cbb293badf0640874846912df3d23549997cf6f87f4c325280ca0",
"artifacts": {
"protocol": { "path": "web/protocol/asset-preview.ts", "sha256": "2a1d877af42424014097c669e9d44c21b27e3171be185320554693cbefcd7438" },
"errorContract": { "path": "web/protocol/error.ts", "sha256": "6aec7b8a9d6903d83ae67718db3ae775d709cabb207cf2a02968d4ff7c5f26c0" },
"generator": { "path": "tools/web/generate-asset-preview-identity.py", "sha256": "753a26be90f7d97828737ebc3a4ab88275a7c655b4f9992406c7c35fba6535ce" },
"blender": { "path": "build_blender_5.2.0/bin/blender", "sha256": "d4483926610484ef9c2ad9241aae1469f934d955ebe791f1920e263e0ba85b82" },
"source": { "path": "tests/files/web/media/sequencer-frame.png", "sha256": "295b083db2299ab904947eb39c17173de70c211882b0d855537d8f3cc27698ed" },
"content": { "path": "tests/golden/M12-02B/preview.png", "sha256": "ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7" }
},
"nextTask": "M12-02C"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

View File

@@ -0,0 +1,34 @@
{
"schemaVersion": 1,
"task": "M12-02C",
"parentTask": "M12-02",
"parityId": "N-023-ASSET-PREVIEW",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"budget": {
"maxEncodedBytes": 16777216,
"maxWidth": 4096,
"maxHeight": 4096,
"maxPixels": 16777216,
"maxDecodedBytes": 67108864,
"maxCompressionRatio": 100
},
"preDecodeOrder": [
"IDENTITY_PARSE",
"ENCODED_BYTE_BUDGET",
"CONTENT_SHA256",
"MIME_AND_HEADER",
"DIMENSION_BINDING",
"PIXEL_AND_DECODED_BYTE_BUDGET",
"COMPRESSION_RATIO"
],
"negativeCaseCount": 8,
"artifacts": {
"decodeProtocol": { "path": "web/protocol/asset-preview-decode.ts", "sha256": "3d1c491af2503a7a6012541ed43400d680f8e666cc12a54db284aeb6ac18ff63" },
"identityProtocol": { "path": "web/protocol/asset-preview.ts", "sha256": "2a1d877af42424014097c669e9d44c21b27e3171be185320554693cbefcd7438" },
"identityGolden": { "path": "tests/golden/M12-02B/identity.json", "sha256": "1b1eb8416ce4aa4d83b0dc42b9cb375f1da965e3f0cb9650991289fc619a0a7b" },
"contentPNG": { "path": "tests/golden/M12-02B/preview.png", "sha256": "ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7" }
},
"nextTask": "M12-02D"
}

View File

@@ -0,0 +1,48 @@
{
"schemaVersion": 1,
"task": "M12-02D",
"parentTask": "M12-02",
"parityId": "N-023-ASSET-PREVIEW",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"commitOrder": [
"PRE_DECODE_GATE",
"OPFS_WRITE",
"OPFS_READBACK",
"CATALOG_TRANSACTION"
],
"faultPoints": [
"BEFORE_OPFS_WRITE",
"AFTER_OPFS_WRITE",
"AFTER_CATALOG_PUT"
],
"failureCode": "STORAGE_TRANSACTION",
"artifacts": {
"commitCoordinator": {
"path": "web/app/src/storage/asset-preview-opfs-commit.ts",
"sha256": "36418e480b108eb885b5d8da6633174ed1face1fa62742a64372a45280e727a2"
},
"browserSuite": {
"path": "web/tests/e2e/asset-preview-opfs-commit.spec.ts",
"sha256": "043b9b06d4c0275938cc1d4f9837df95f58f281130f3c0f2b90c10540244592e"
},
"unitSuite": {
"path": "web/tests/unit/asset-preview-opfs-commit.test.mjs",
"sha256": "f489a1d9a4c5fb24a99bce6d31841534c7cf3981b53076a0d9e19d106e9d0d74"
},
"decodeProtocol": {
"path": "web/protocol/asset-preview-decode.ts",
"sha256": "3d1c491af2503a7a6012541ed43400d680f8e666cc12a54db284aeb6ac18ff63"
},
"identityGolden": {
"path": "tests/golden/M12-02B/identity.json",
"sha256": "1b1eb8416ce4aa4d83b0dc42b9cb375f1da965e3f0cb9650991289fc619a0a7b"
},
"contentPNG": {
"path": "tests/golden/M12-02B/preview.png",
"sha256": "ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7"
}
},
"nextTask": "M12-02E"
}

View File

@@ -0,0 +1,41 @@
{
"schemaVersion": 1,
"task": "M12-02E",
"parentTask": "M12-02",
"parityId": "N-023-ASSET-PREVIEW",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"claims": [
"ONE_CONTENT_HASH_ONE_OPFS_PAYLOAD",
"DISTINCT_ASSET_IDENTITY_PRESERVED",
"DISTINCT_ASSET_METADATA_PRESERVED",
"REOPENED_HEAD_VERIFIED"
],
"assetCount": 2,
"physicalPayloadCount": 1,
"contentSha256": "ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7",
"artifacts": {
"commitCoordinator": {
"path": "web/app/src/storage/asset-preview-opfs-commit.ts",
"sha256": "36418e480b108eb885b5d8da6633174ed1face1fa62742a64372a45280e727a2"
},
"browserSuite": {
"path": "web/tests/e2e/asset-preview-dedup.spec.ts",
"sha256": "4e53b7a35eb109b152bd6dc0c3348dcb08879d17619968d37fc761c67aa38b40"
},
"unitSuite": {
"path": "web/tests/unit/asset-preview-dedup.test.mjs",
"sha256": "e023fdd33e0f40c1331dfdd73cd287dc684256b9d134971ab17db8cfe2a83835"
},
"catalogFixture": {
"path": "tests/golden/M12-01D/catalog-v2.json",
"sha256": "38e5d1771b3d2d63ce5e10268eac4513f2043b0cbf71ab1799c1868bc2aa97fb"
},
"contentPNG": {
"path": "tests/golden/M12-02B/preview.png",
"sha256": "ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7"
}
},
"nextTask": "M12-02F"
}

View File

@@ -0,0 +1,35 @@
{
"schemaVersion": 1,
"task": "M12-02F",
"parentTask": "M12-02",
"parityId": "N-023-ASSET-PREVIEW",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"states": ["READY", "QUARANTINED", "REOPENED_QUARANTINED"],
"failureCode": "ASSET_SOURCE_HASH_MISMATCH",
"catalogMutationOnCorruption": false,
"artifacts": {
"quarantineProtocol": {
"path": "web/app/src/storage/asset-preview-quarantine.ts",
"sha256": "a5f3330dbd16d9f578d85d9504c980fffea85b834b77340a307ce21ce9b1cb04"
},
"browserSuite": {
"path": "web/tests/e2e/asset-preview-quarantine.spec.ts",
"sha256": "d8e1d0741765e8f8bfd47b45cf03213d8629efdbbf77dfd33846785a3ec80c27"
},
"unitSuite": {
"path": "web/tests/unit/asset-preview-quarantine.test.mjs",
"sha256": "79c836c7a3be4e9f305a962775444c766577cca87fa6d1698811e75eb21f2d9a"
},
"commitCoordinator": {
"path": "web/app/src/storage/asset-preview-opfs-commit.ts",
"sha256": "36418e480b108eb885b5d8da6633174ed1face1fa62742a64372a45280e727a2"
},
"contentPNG": {
"path": "tests/golden/M12-02B/preview.png",
"sha256": "ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7"
}
},
"nextTask": "M12-02G"
}

View File

@@ -0,0 +1,39 @@
{
"schemaVersion": 1,
"task": "M12-02G",
"parentTask": "M12-02",
"parityId": "N-023-ASSET-PREVIEW",
"enablingTask": true,
"parityStateChange": false,
"implementationClass": "NOT_APPLICABLE",
"sequence": [
"REMOVE_FIRST_REFERENCE",
"RETAIN_PAYLOAD",
"REMOVE_FINAL_REFERENCE",
"COLLECT_PAYLOAD"
],
"otherProjectPayload": "PRESERVED_READY",
"artifacts": {
"referenceGC": {
"path": "web/app/src/storage/asset-preview-reference-gc.ts",
"sha256": "76b9d8ccd3e7992356f33adc694001f9b0ff364788234389eacdb09198d1415e"
},
"browserSuite": {
"path": "web/tests/e2e/asset-preview-reference-gc.spec.ts",
"sha256": "2e9e9b47883997092c5afb0fb7859a484754764de19006e24a8ff2bdeb24f35a"
},
"unitSuite": {
"path": "web/tests/unit/asset-preview-reference-gc.test.mjs",
"sha256": "c5de3122b5d8aab17daf0179cb4f5bb0b5d299408818849cbe7b18e40a47706e"
},
"opfsStorage": {
"path": "web/app/src/storage/opfs-files.ts",
"sha256": "2e8ef9d72194bf803a7e823fb2b7de30b9f10ae6dd4b031b81b97ff82eee9cc6"
},
"contentPNG": {
"path": "tests/golden/M12-02B/preview.png",
"sha256": "ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7"
}
},
"nextTask": "M12-02H"
}

View File

@@ -0,0 +1,17 @@
{
"schemaVersion": 1,
"task": "M12-02H",
"generator": "BLENDER_ASSET_PREVIEW_IDENTITY",
"blenderVersion": "5.2.0",
"width": 8,
"height": 8,
"pixelCount": 64,
"pixelFormat": "RGBA8",
"colorSpace": "SRGB",
"alphaMode": "STRAIGHT",
"uniquePixelCount": 1,
"referencePixel": [51, 102, 204, 255],
"rgbaSha256": "c2ff81750b41193ce1a06d47d0ff18168a756136dbf0f2586cd0638d4bf0ef00",
"sourceContentMaxFloatError": 0,
"contentSha256": "ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7"
}

View File

@@ -0,0 +1,64 @@
{
"schemaVersion": 1,
"task": "M12-02H",
"parentTask": "M12-02",
"parityId": "N-023-ASSET-PREVIEW",
"enablingTask": false,
"parityStateChange": true,
"implementationClass": "LOCAL_EXACT",
"completedSlice": "A-preview-desktop-browser-main-offscreen-display",
"backends": [
"BLENDER_5_2_DESKTOP",
"MAIN_THREAD_CANVAS_2D",
"OFFSCREEN_CANVAS_2D"
],
"reference": {
"width": 8,
"height": 8,
"pixelFormat": "RGBA8",
"colorSpace": "SRGB",
"alphaMode": "STRAIGHT",
"rgbaSha256": "c2ff81750b41193ce1a06d47d0ff18168a756136dbf0f2586cd0638d4bf0ef00"
},
"thresholds": {
"maxMeanAbsoluteError": 0,
"maxRootMeanSquaredError": 0,
"maxP95ChannelError": 0,
"maxBadPixelRatio": 0,
"badPixelChannelError": 0,
"foregroundDeltaFromReferenceBackground": 1,
"minForegroundIntersectionOverUnion": 1,
"maxAlphaCoverageDeltaRatio": 0
},
"artifacts": {
"displayRuntime": {
"path": "web/app/src/assets/AssetPreviewDisplay.ts",
"sha256": "e4a46a40291427afc185caf016b02120ea71639ab4ab4ac250a5c3de28ee8d28"
},
"displayWorker": {
"path": "web/app/src/workers/asset-preview-display-test.worker.ts",
"sha256": "6322562f54b608b7eaac4ca3bc0f8d861f47bb8e9b37b3c2ae3d61163108724f"
},
"desktopChecker": {
"path": "tools/web/check-asset-preview-display.mjs",
"sha256": "d03d766e69ea0547be2c247b5d7ef8fd5ceab6b399dc996eba711fa0cac0ca54"
},
"desktopReport": {
"path": "tests/golden/M12-02H/desktop-report.json",
"sha256": "cdf841f5d27362f6df380772ada8b7b1427d051a8b46b5c2c20aab0b597c25d0"
},
"browserSuite": {
"path": "web/tests/e2e/asset-preview-display.spec.ts",
"sha256": "340d386c6a854c44cd6f6207e3699f870b8ded2aada4747afd6ff1103c719520"
},
"unitSuite": {
"path": "web/tests/unit/asset-preview-display.test.mjs",
"sha256": "f10a05900c4d1282251f7a76e7c413a18602910f55fe8400f1713f548eba3873"
},
"contentPNG": {
"path": "tests/golden/M12-02B/preview.png",
"sha256": "ff139c4a1c5d388c78c5168dfd3272e80ea0d1b15b3743e29a38cd908e8c70e7"
}
},
"nextTask": "M12-03A"
}

View File

@@ -0,0 +1,255 @@
{
"schemaVersion": 1,
"task": "M12-03A",
"enablingTask": true,
"parityStateChange": false,
"blenderVersion": "5.2.0",
"sources": [
{
"role": "LINK_APPEND_CONTEXT_API",
"path": "blender-5.2.0/source/blender/blenkernel/BKE_blendfile_link_append.hh",
"sha256": "3676283eca608a12fa6485c438374dfbe07a787efe22fd7719aadb8ccb8c81f9"
},
{
"role": "LINK_APPEND_CLOSURE",
"path": "blender-5.2.0/source/blender/blenkernel/intern/blendfile_link_append.cc",
"sha256": "b6e7f839a934eabd708c5465fdcf00e138e1f84837ae6690198b14a5069b6d23"
},
{
"role": "LINK_APPEND_OPERATORS",
"path": "blender-5.2.0/source/blender/windowmanager/intern/wm_files_link.cc",
"sha256": "d67d555f8534e6794ba7e520d95faef5a0a83017415517c8821690fa4accfb8d"
},
{
"role": "PYTHON_LIBRARY_LOAD",
"path": "blender-5.2.0/source/blender/python/intern/bpy_library_load.cc",
"sha256": "41b80637140582c3c75fabe234a8c33e9749c75cfc5c8f9c748401c18b253cab"
},
{
"role": "BLEND_LIBRARY_READER",
"path": "blender-5.2.0/source/blender/blenloader/BLO_readfile.hh",
"sha256": "24e65071b94e7fbc754e12563b9698f2d92a5aab06b89763950d2d4f7d66c623"
},
{
"role": "OVERRIDE_STORAGE",
"path": "blender-5.2.0/source/blender/makesdna/DNA_ID.h",
"sha256": "27d0eac02df737f2d2298eeef45e66eae0d76da66542ccdf32400b3e9bd904a9"
},
{
"role": "OVERRIDE_API",
"path": "blender-5.2.0/source/blender/blenkernel/BKE_lib_override.hh",
"sha256": "78545dad30c66a61e1f9754ba8017422b8d7fd3a4b41e522299e27f951762fde"
},
{
"role": "OVERRIDE_CLOSURE",
"path": "blender-5.2.0/source/blender/blenkernel/intern/lib_override.cc",
"sha256": "34ed9f0edd6549c77e73dc958ec189717bb6eb7dda3531109161546b8c532808"
},
{
"role": "CURRENT_WEB_LIBRARY_GATE",
"path": "web/protocol/asset-library-io.ts",
"sha256": "5c62539db3833a2113007dfbdfd12ca06704d86e0cf0e57ad97f7fbf6acda7f4"
}
],
"runtimeFixture": {
"path": "tests/files/web/image_resource_matrix.blend",
"sha256": "21e16821b62dad84539560bfa53ac755f097dbcd33ca2d614c07123461cdd74e",
"nestedLibraries": [
{
"filepath": "//resources/image_resource_library.blend",
"isArchive": false
}
]
},
"dataBlockSurface": {
"discoverableCollections": [
"actions",
"annotations",
"armatures",
"brushes",
"cache_files",
"cameras",
"collections",
"curves",
"fonts",
"grease_pencils",
"hair_curves",
"images",
"lattices",
"lightprobes",
"lights",
"linestyles",
"masks",
"materials",
"meshes",
"metaballs",
"movieclips",
"node_groups",
"objects",
"paint_curves",
"palettes",
"particles",
"pointclouds",
"scenes",
"screens",
"sounds",
"speakers",
"texts",
"textures",
"volumes",
"workspaces",
"worlds"
],
"onlyAppendableCollections": ["screens", "workspaces"],
"nonRootRoles": [
{"collection": "libraries", "role": "SOURCE_AND_TRANSITIVE_LIBRARY_METADATA"},
{"collection": "shape_keys", "role": "EMBEDDED_OWNER_DEPENDENCY"},
{"collection": "window_managers", "role": "CURRENT_FILE_RUNTIME_ONLY"},
{"collection": "all_ids", "role": "AGGREGATE_QUERY_NOT_LIBRARY_SECTION"}
]
},
"operatorSurface": {
"appendProperties": [
"filepath", "directory", "filename", "files", "check_existing", "filter_blender",
"filter_backup", "filter_image", "filter_movie", "filter_python", "filter_font",
"filter_sound", "filter_text", "filter_archive", "filter_btx", "filter_alembic",
"filter_usd", "filter_obj", "filter_volume", "filter_folder", "filter_blenlib",
"filemode", "display_type", "sort_method", "link", "do_reuse_local_id",
"clear_asset_data", "autoselect", "active_collection", "instance_collections",
"instance_object_data", "set_fake", "use_recursive"
],
"linkProperties": [
"filepath", "directory", "filename", "files", "check_existing", "filter_blender",
"filter_backup", "filter_image", "filter_movie", "filter_python", "filter_font",
"filter_sound", "filter_text", "filter_archive", "filter_btx", "filter_alembic",
"filter_usd", "filter_obj", "filter_volume", "filter_folder", "filter_blenlib",
"filemode", "relative_path", "display_type", "sort_method", "link",
"do_reuse_local_id", "clear_asset_data", "autoselect", "active_collection",
"instance_collections", "instance_object_data"
],
"pythonLoadArguments": [
"filepath", "link", "pack", "relative", "set_fake", "recursive", "reuse_local_id",
"assets_only", "clear_asset_data", "create_liboverrides", "reuse_liboverrides",
"create_liboverrides_runtime"
]
},
"operations": [
{
"operation": "APPEND",
"entryPoints": ["WM_OT_append", "bpy.data.libraries.load(link=False)"],
"rootCollections": "ALL_DISCOVERABLE",
"dataBlockRoles": [
"SOURCE_LIBRARY",
"DIRECT_SELECTED_ROOT",
"INDIRECT_ID_DEPENDENCY",
"TRANSITIVE_LIBRARY_DEPENDENCY",
"EMBEDDED_OWNER_DEPENDENCY",
"LIBOVERRIDE_DEPENDENCY",
"REUSABLE_LOCAL_ID",
"INSTANTIATED_COLLECTION_OBJECT_OR_OBJECT_DATA"
],
"closure": {
"walker": "BKE_library_foreach_ID_link",
"walkFlags": ["IDWALK_NOP"],
"ignoredAsIndependentEdges": [
"IDWALK_CB_EMBEDDED",
"IDWALK_CB_EMBEDDED_NOT_OWNING",
"IDWALK_CB_INTERNAL",
"IDWALK_CB_LOOPBACK"
],
"selectedRootTag": "DIRECT",
"discoveredDependencyTag": "INDIRECT",
"overrideDependencyTags": ["LIBOVERRIDE_DEPENDENCY", "LIBOVERRIDE_DEPENDENCY_ONLY"],
"terminalActions": ["KEEP_LINKED", "REUSE_LOCAL", "MAKE_LOCAL", "COPY_LOCAL"],
"recursiveCrossLibraryLocalization": "CONTROLLED_BY_USE_RECURSIVE"
}
},
{
"operation": "LINK",
"entryPoints": ["WM_OT_link", "bpy.data.libraries.load(link=True)"],
"rootCollections": "DISCOVERABLE_EXCEPT_ONLY_APPENDABLE",
"dataBlockRoles": [
"SOURCE_LIBRARY",
"DIRECT_LINKED_ROOT",
"INDIRECT_LINKED_ID_DEPENDENCY",
"TRANSITIVE_LIBRARY_DEPENDENCY",
"EMBEDDED_OWNER_DEPENDENCY",
"INSTANTIATED_COLLECTION_OBJECT_OR_OBJECT_DATA"
],
"closure": {
"readerStages": ["BLO_library_link_begin", "BLO_library_link_named_part", "BLO_library_link_end"],
"selectedRootTag": "ID_TAG_EXTERN",
"discoveredDependencyTag": "ID_TAG_INDIRECT",
"sourceOwnership": "ID.lib",
"transitiveLibraryOwnership": "Library.runtime.parent",
"localization": "NONE"
}
},
{
"operation": "LIBRARY_OVERRIDE",
"entryPoints": ["bpy.data.libraries.load(link=True, create_liboverrides=True)", "BKE_blendfile_override"],
"rootCollections": "LINK_ROOT_SURFACE_SUBJECT_TO_OVERRIDE_HIERARCHY",
"dataBlockRoles": [
"LINKED_REFERENCE_ROOT",
"LINKED_REFERENCE_DEPENDENCY",
"LOCAL_OVERRIDE_ID",
"LOCAL_HIERARCHY_ROOT",
"SYSTEM_OVERRIDE_DEPENDENCY",
"OVERRIDE_PROPERTY",
"OVERRIDE_PROPERTY_OPERATION",
"REFERENCE_AND_LOCAL_SUBITEM"
],
"closure": {
"referencePointer": "IDOverrideLibrary.reference",
"hierarchyRootPointer": "IDOverrideLibrary.hierarchy_root",
"propertyPath": "IDOverrideLibraryProperty.rna_path",
"operationCollection": "IDOverrideLibraryProperty.operations",
"creation": "BKE_lib_override_library_create",
"resync": "BKE_lib_override_library_resync",
"operationDiff": "BKE_lib_override_library_operations_create",
"dependencyRule": "REFERENCE_POINTER_GRAPH_WITH_LOCAL_OVERRIDE_REMAP",
"linkedReferencePreserved": true
}
}
],
"overrideRNA": {
"IDOverrideLibrary": [
{"identifier": "reference", "type": "POINTER", "isReadonly": true},
{"identifier": "hierarchy_root", "type": "POINTER", "isReadonly": true},
{"identifier": "is_in_hierarchy", "type": "BOOLEAN", "isReadonly": false},
{"identifier": "is_system_override", "type": "BOOLEAN", "isReadonly": false},
{"identifier": "properties", "type": "COLLECTION", "isReadonly": true}
],
"IDOverrideLibraryProperty": [
{"identifier": "rna_path", "type": "STRING", "isReadonly": true},
{"identifier": "operations", "type": "COLLECTION", "isReadonly": true}
],
"IDOverrideLibraryPropertyOperation": [
{"identifier": "operation", "type": "ENUM", "isReadonly": true},
{"identifier": "flag", "type": "ENUM", "isReadonly": true},
{"identifier": "subitem_reference_name", "type": "STRING", "isReadonly": true},
{"identifier": "subitem_local_name", "type": "STRING", "isReadonly": true},
{"identifier": "subitem_reference_id", "type": "POINTER", "isReadonly": true},
{"identifier": "subitem_local_id", "type": "POINTER", "isReadonly": true},
{"identifier": "subitem_reference_index", "type": "INT", "isReadonly": true},
{"identifier": "subitem_local_index", "type": "INT", "isReadonly": true},
{"identifier": "label", "type": "STRING", "isReadonly": true},
{"identifier": "tooltip", "type": "STRING", "isReadonly": true}
]
},
"currentWebGap": {
"represented": ["LIBRARY_SOURCE", "LIBRARY_DEPENDENCY_IDS", "READ_ONLY_FLAG"],
"missing": [
"PER_ID_SOURCE_LIBRARY",
"DIRECT_INDIRECT_ID_CLASSIFICATION",
"APPEND_LOCAL_OWNERSHIP",
"APPEND_REUSE_WEAK_REFERENCE",
"OVERRIDE_REFERENCE",
"OVERRIDE_HIERARCHY_ROOT",
"OVERRIDE_PROPERTY_OPERATIONS",
"INVALIDATION_TOKEN"
],
"mutationGate": "LIBRARY_MUTATION_UNAVAILABLE"
},
"nextTask": "M12-03B"
}

View File

@@ -0,0 +1,80 @@
{
"schemaVersion": 1,
"task": "M12-03B",
"source": {
"schemaVersion": 1,
"sourceLibraryId": "library:f35430c19c85351788053ceb44ba4dc01ec0a190a985197e60826d9d52c55a94",
"sourceLocator": "project-assets/libraries/m12-library-source.blend",
"sourceSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"bindings": [
{
"schemaVersion": 1,
"operation": "APPEND",
"source": {
"schemaVersion": 1,
"sourceLibraryId": "library:f35430c19c85351788053ceb44ba4dc01ec0a190a985197e60826d9d52c55a94",
"sourceLocator": "project-assets/libraries/m12-library-source.blend",
"sourceSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"sourceDataBlockId": "Object/M12Asset",
"owner": {
"kind": "LOCAL_MAIN",
"projectId": "project:m12",
"localDataBlockId": "Object/M12Asset"
},
"readOnly": false,
"referenceReadOnly": false,
"sourceGeneration": 3,
"sourceRevision": 7,
"dependencyClosureSha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"invalidationToken": "libtoken:c650807d1afb1c64d1e9deba45120b2bff5336dfdff52ce61c5d3645be923e6a"
},
{
"schemaVersion": 1,
"operation": "LINK",
"source": {
"schemaVersion": 1,
"sourceLibraryId": "library:f35430c19c85351788053ceb44ba4dc01ec0a190a985197e60826d9d52c55a94",
"sourceLocator": "project-assets/libraries/m12-library-source.blend",
"sourceSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"sourceDataBlockId": "Object/M12Asset",
"owner": {
"kind": "SOURCE_LIBRARY",
"sourceLibraryId": "library:f35430c19c85351788053ceb44ba4dc01ec0a190a985197e60826d9d52c55a94",
"sourceDataBlockId": "Object/M12Asset"
},
"readOnly": true,
"referenceReadOnly": true,
"sourceGeneration": 3,
"sourceRevision": 7,
"dependencyClosureSha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"invalidationToken": "libtoken:028c1336cb8f27596daa8754654be461ab10af66caa35f706eac3f4b9480cfa4"
},
{
"schemaVersion": 1,
"operation": "LIBRARY_OVERRIDE",
"source": {
"schemaVersion": 1,
"sourceLibraryId": "library:f35430c19c85351788053ceb44ba4dc01ec0a190a985197e60826d9d52c55a94",
"sourceLocator": "project-assets/libraries/m12-library-source.blend",
"sourceSha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
"sourceDataBlockId": "Object/M12Asset",
"owner": {
"kind": "LOCAL_OVERRIDE",
"projectId": "project:m12",
"localDataBlockId": "Object/M12AssetOverride",
"referenceSourceDataBlockId": "Object/M12Asset",
"hierarchyRootDataBlockId": "Collection/M12Root"
},
"readOnly": false,
"referenceReadOnly": true,
"sourceGeneration": 3,
"sourceRevision": 7,
"dependencyClosureSha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"invalidationToken": "libtoken:a308528792e6056af25bebb3a349ac7e1ff5c4e40189d2cb7aad453a8a8299fe"
}
]
}

View File

@@ -0,0 +1,42 @@
{
"schemaVersion": 1,
"task": "M12-03B",
"parentTask": "M12-03",
"enablingTask": true,
"parityStateChange": false,
"operations": ["APPEND", "LINK", "LIBRARY_OVERRIDE"],
"ownershipSemantics": {
"APPEND": {"owner": "LOCAL_MAIN", "readOnly": false, "referenceReadOnly": false},
"LINK": {"owner": "SOURCE_LIBRARY", "readOnly": true, "referenceReadOnly": true},
"LIBRARY_OVERRIDE": {"owner": "LOCAL_OVERRIDE", "readOnly": false, "referenceReadOnly": true}
},
"invalidationFields": [
"operation",
"sourceLibraryId",
"sourceSha256",
"sourceDataBlockId",
"owner",
"sourceGeneration",
"sourceRevision",
"dependencyClosureSha256"
],
"artifacts": {
"parentInventory": {
"path": "tests/golden/M12-03A/library-operation-inventory.json",
"sha256": "0dcb16233b52b3c0be2373f489d6bf3c771c9d6564993ff98b5d63dcd322fef7"
},
"protocol": {
"path": "web/protocol/library-operation-identity.ts",
"sha256": "5371133bd98e05935cd75bab582abedec32a36559af8d212f0bc8a534ef19451"
},
"golden": {
"path": "tests/golden/M12-03B/library-operation-bindings.json",
"sha256": "b39c0f26697ac688c1203ae4e3e27d8a02686c7c9da9afc438c89a0b4d69370f"
},
"unitSuite": {
"path": "web/tests/unit/library-operation-identity.test.mjs",
"sha256": "0e5b2c82d481180eb8eb22de16ad8cdef5e58fa7423c26011faaffbac788e547"
}
},
"nextTask": "M12-03C"
}

View File

@@ -0,0 +1,202 @@
{
"appendedGraph": {
"edges": [
{
"from": "Object/M12 Append Object",
"relation": "OBJECT_DATA",
"to": "Mesh/M12 Append Mesh"
},
{
"from": "Mesh/M12 Append Mesh",
"relation": "MATERIAL_SLOT[0]",
"to": "Material/M12 Append Material"
},
{
"from": "Material/M12 Append Material",
"relation": "NODE_IMAGE[M12 Append Image Node]",
"to": "Image/M12 Append Image"
}
],
"geometry": {
"edges": 4,
"loops": 4,
"materialSlots": [
"M12 Append Material"
],
"polygons": 1,
"uvLayers": [
"UVMap"
],
"vertices": 4
},
"ids": {
"IMAGE": {
"idType": "IMAGE",
"isLibraryOverride": false,
"library": null,
"name": "M12 Append Image",
"nameFull": "M12 Append Image"
},
"MATERIAL": {
"idType": "MATERIAL",
"isLibraryOverride": false,
"library": null,
"name": "M12 Append Material",
"nameFull": "M12 Append Material"
},
"MESH": {
"idType": "MESH",
"isLibraryOverride": false,
"library": null,
"name": "M12 Append Mesh",
"nameFull": "M12 Append Mesh"
},
"OBJECT": {
"idType": "OBJECT",
"isLibraryOverride": false,
"library": null,
"name": "M12 Append Object",
"nameFull": "M12 Append Object"
}
},
"image": {
"channels": 4,
"colorspace": "sRGB",
"packed": true,
"pixelFloat32Sha256": "6f0f8c231d65149e69e6ed12d370bcfa095ef90adc202065492ea8c8ef17e45a",
"size": [
2,
2
]
},
"root": {
"idType": "OBJECT",
"isLibraryOverride": false,
"library": null,
"name": "M12 Append Object",
"nameFull": "M12 Append Object"
},
"sourceMarker": "M12-03C"
},
"blenderVersion": "5.2.0",
"nextTask": "M12-03D",
"operation": "APPEND",
"schemaVersion": 1,
"selectedRoots": [
"Object/M12 Append Object"
],
"source": {
"file": "m12_append_source.blend",
"sha256": "5b60d02926efd588a6ca300ba31414cdf37dbc48786c17b383a70319057c0606"
},
"sourceGraph": {
"edges": [
{
"from": "Object/M12 Append Object",
"relation": "OBJECT_DATA",
"to": "Mesh/M12 Append Mesh"
},
{
"from": "Mesh/M12 Append Mesh",
"relation": "MATERIAL_SLOT[0]",
"to": "Material/M12 Append Material"
},
{
"from": "Material/M12 Append Material",
"relation": "NODE_IMAGE[M12 Append Image Node]",
"to": "Image/M12 Append Image"
}
],
"geometry": {
"edges": 4,
"loops": 4,
"materialSlots": [
"M12 Append Material"
],
"polygons": 1,
"uvLayers": [
"UVMap"
],
"vertices": 4
},
"ids": {
"IMAGE": {
"idType": "IMAGE",
"isLibraryOverride": false,
"library": null,
"name": "M12 Append Image",
"nameFull": "M12 Append Image"
},
"MATERIAL": {
"idType": "MATERIAL",
"isLibraryOverride": false,
"library": null,
"name": "M12 Append Material",
"nameFull": "M12 Append Material"
},
"MESH": {
"idType": "MESH",
"isLibraryOverride": false,
"library": null,
"name": "M12 Append Mesh",
"nameFull": "M12 Append Mesh"
},
"OBJECT": {
"idType": "OBJECT",
"isLibraryOverride": false,
"library": null,
"name": "M12 Append Object",
"nameFull": "M12 Append Object"
}
},
"image": {
"channels": 4,
"colorspace": "sRGB",
"packed": true,
"pixelFloat32Sha256": "6f0f8c231d65149e69e6ed12d370bcfa095ef90adc202065492ea8c8ef17e45a",
"size": [
2,
2
]
},
"root": {
"idType": "OBJECT",
"isLibraryOverride": false,
"library": null,
"name": "M12 Append Object",
"nameFull": "M12 Append Object"
},
"sourceMarker": "M12-03C"
},
"stableMapping": [
{
"local": "Object/M12 Append Object",
"owner": "LOCAL_MAIN",
"readOnly": false,
"source": "Object/M12 Append Object"
},
{
"local": "Mesh/M12 Append Mesh",
"owner": "LOCAL_MAIN",
"readOnly": false,
"source": "Mesh/M12 Append Mesh"
},
{
"local": "Material/M12 Append Material",
"owner": "LOCAL_MAIN",
"readOnly": false,
"source": "Material/M12 Append Material"
},
{
"local": "Image/M12 Append Image",
"owner": "LOCAL_MAIN",
"readOnly": false,
"source": "Image/M12 Append Image"
}
],
"target": {
"file": "m12_append_target.blend",
"sha256": "5cde4927f47e33f0338de38184ce5ba971825fcefd1d8dc6feb48d41a6cdb60c"
},
"task": "M12-03C"
}

View File

@@ -0,0 +1,39 @@
{
"schemaVersion": 1,
"task": "M12-03C",
"parentTask": "M12-03",
"enablingTask": true,
"parityStateChange": false,
"runtime": "BLENDER_5_2_DESKTOP",
"operation": "APPEND",
"selectedRoots": ["Object/M12 Append Object"],
"dependencyTypes": ["OBJECT", "MESH", "MATERIAL", "IMAGE"],
"containerDeterminism": "SESSION_BOUND_SEMANTIC_REPORT_EXACT",
"artifacts": {
"parentContract": {
"path": "tests/golden/M12-03B/manifest.json",
"sha256": "f388aedb9c0901932cf90c058f2f2b83259d9797cd6b144566a25e37a348c64b"
},
"generator": {
"path": "tools/web/generate-library-append-fixture.py",
"sha256": "b9d8e3bd24966b0d7d419382d7ef0b35ae8def9ee2c2236dfd3ad1a90aebe66f"
},
"checker": {
"path": "tools/web/check-library-append-fixture.mjs",
"sha256": "6f8cc0d51be19423cf6fb7203c3c16f8d27e0fbb3b5b357bad5dec6c5ceb432d"
},
"sourceBlend": {
"path": "tests/files/web/m12_library_append_v1/m12_append_source.blend",
"sha256": "5b60d02926efd588a6ca300ba31414cdf37dbc48786c17b383a70319057c0606"
},
"targetBlend": {
"path": "tests/files/web/m12_library_append_v1/m12_append_target.blend",
"sha256": "5cde4927f47e33f0338de38184ce5ba971825fcefd1d8dc6feb48d41a6cdb60c"
},
"desktopReport": {
"path": "tests/golden/M12-03C/desktop-append-report.json",
"sha256": "b1d7b8b9e832d18d69081f63981062800e0f00f0c9aec025b18274510ed76e2a"
}
},
"nextTask": "M12-03D"
}