Rebuild local Blender WASM environment and recovery evidence
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
tests/files/web/generated/WBV2-P2-001-EDITOR.OPEN_SCENE.blend
Normal file
BIN
tests/files/web/generated/WBV2-P2-001-EDITOR.OPEN_SCENE.blend
Normal file
Binary file not shown.
Binary file not shown.
BIN
tests/files/web/generated/WBV2-P2-003-MESH.EDIT_CORE.blend
Normal file
BIN
tests/files/web/generated/WBV2-P2-003-MESH.EDIT_CORE.blend
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
tests/files/web/generated/WBV2-P3-001-MATERIAL.PBR_UV.blend
Normal file
BIN
tests/files/web/generated/WBV2-P3-001-MATERIAL.PBR_UV.blend
Normal file
Binary file not shown.
BIN
tests/files/web/generated/WBV2-P3-002-ANIMATION.TRS_ACTION.blend
Normal file
BIN
tests/files/web/generated/WBV2-P3-002-ANIMATION.TRS_ACTION.blend
Normal file
Binary file not shown.
BIN
tests/files/web/generated/WBV2-P3-003-RIG.POSE_SKIN.blend
Normal file
BIN
tests/files/web/generated/WBV2-P3-003-RIG.POSE_SKIN.blend
Normal file
Binary file not shown.
BIN
tests/files/web/generated/WBV2-P3-004-IO.GLB_ROUNDTRIP.blend
Normal file
BIN
tests/files/web/generated/WBV2-P3-004-IO.GLB_ROUNDTRIP.blend
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend
Normal file
BIN
tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
tests/files/web/generated/WBV2-P5-001-RENDER.ROUTING.blend
Normal file
BIN
tests/files/web/generated/WBV2-P5-001-RENDER.ROUTING.blend
Normal file
Binary file not shown.
Binary file not shown.
BIN
tests/files/web/generated/WBV2-P5-003-SERVER.JOB_BINDING.blend
Normal file
BIN
tests/files/web/generated/WBV2-P5-003-SERVER.JOB_BINDING.blend
Normal file
Binary file not shown.
BIN
tests/files/web/generated/WBV2-P6-001-SECURITY.SCRIPTING.blend
Normal file
BIN
tests/files/web/generated/WBV2-P6-001-SECURITY.SCRIPTING.blend
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
tests/files/web/generated/WBV2P3005Library.blend
Normal file
BIN
tests/files/web/generated/WBV2P3005Library.blend
Normal file
Binary file not shown.
51
tests/golden/WBV2-P0-002/inventory-check-report.json
Normal file
51
tests/golden/WBV2-P0-002/inventory-check-report.json
Normal file
@@ -0,0 +1,51 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P0-002",
|
||||
"operation": "BLENDER_52_INVENTORY_CHECK",
|
||||
"status": "PASS",
|
||||
"summary": {
|
||||
"inventoryEntries": 6900,
|
||||
"capabilityCount": 15,
|
||||
"unknownEntries": 0,
|
||||
"completedLegacyEntries": 281,
|
||||
"pendingLegacyEntries": 6618,
|
||||
"activeLegacyEntries": 1,
|
||||
"featureParityClaims": 0,
|
||||
"byKind": {
|
||||
"area": 19,
|
||||
"constraint": 29,
|
||||
"datablock": 29,
|
||||
"io": 33,
|
||||
"keymap": 280,
|
||||
"keymap-item": 3228,
|
||||
"modifier": 83,
|
||||
"node": 451,
|
||||
"operator": 2486,
|
||||
"physics": 65,
|
||||
"region": 17,
|
||||
"rna": 108,
|
||||
"space": 19,
|
||||
"space-class": 16,
|
||||
"strip": 24,
|
||||
"workspace": 13
|
||||
},
|
||||
"byLayer": {
|
||||
"CORE": 137,
|
||||
"FEATURE": 2833,
|
||||
"UI": 3930
|
||||
}
|
||||
},
|
||||
"sourceHashes": {
|
||||
"tests/golden/M15-02A/blender-parity-map.json": "f3e757f26e58a4252b6cc2a7f9275428bbe5bf659cc0f0ff6350a147bdf2809c",
|
||||
"tests/golden/M15-03A/next-task-plan.json": "bad0d7822c0d4d764bd174c86d9da897229e71de6363940125a594b8017e07f5",
|
||||
"tests/golden/M15-03A/completed-gap-tasks.json": "1dfc9c4ae8fb9a135e624ca4f9fe1ea10500ef16a2567a3cccdcfe48fbc38466",
|
||||
"docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0",
|
||||
"docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json": "c14e01161876ab924c1fe68466c78481fb583d1b822399ffa9f1df1b1d6fb266",
|
||||
"tests/golden/WBV2-P0-001/manifest.json": "09ffbe342f2c510500767ddaa02b18703c25f6c1ee0b2ebd0c563e260c0d0c2b"
|
||||
},
|
||||
"inventorySha256": "b506ca5974d3740ff6f49dcf67c786979f4c828b46c1a0fed3b18d6e90c544e6",
|
||||
"parityMapSha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8",
|
||||
"deterministic": true,
|
||||
"featureParityClaims": 0,
|
||||
"nextTask": "WBV2-P0-003"
|
||||
}
|
||||
41450
tests/golden/WBV2-P0-002/inventory.json
Normal file
41450
tests/golden/WBV2-P0-002/inventory.json
Normal file
File diff suppressed because it is too large
Load Diff
53
tests/golden/WBV2-P0-002/manifest.json
Normal file
53
tests/golden/WBV2-P0-002/manifest.json
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P0-002",
|
||||
"parentTask": "WBV2-P0-001",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "BLENDER_5_2_INVENTORY",
|
||||
"operation": "BLENDER_52_CAPABILITY_PARITY_MAP",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P0-001/manifest.json",
|
||||
"sha256": "09ffbe342f2c510500767ddaa02b18703c25f6c1ee0b2ebd0c563e260c0d0c2b"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generate-wbv2-inventory.mjs",
|
||||
"sha256": "d801d6e187741cc8953797f139ba760a5f1022c7cae2a8976fe709070330e91b"
|
||||
},
|
||||
"checker": {
|
||||
"path": "tools/web/check-wbv2-inventory.mjs",
|
||||
"sha256": "e729e63886ddb658d84b2c29775a9d3c340c334f824861e458a944e15999af8c"
|
||||
},
|
||||
"inventory": {
|
||||
"path": "tests/golden/WBV2-P0-002/inventory.json",
|
||||
"sha256": "b506ca5974d3740ff6f49dcf67c786979f4c828b46c1a0fed3b18d6e90c544e6"
|
||||
},
|
||||
"parityMap": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8"
|
||||
},
|
||||
"sourceHashes": {
|
||||
"path": "tests/golden/WBV2-P0-002/source-hashes.json",
|
||||
"sha256": "c6c6260d10bc8529e4b26563ce81168e1b0fffb3b175b2d4998ec1c0aa1c1497"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P0-002/inventory-check-report.json",
|
||||
"sha256": "57d67fac6ab17c438cc1da446eac958edf364441d915a39439e550bd8c5d5571"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P0-002.md",
|
||||
"sha256": "adaaecf668840f83814ed0e94c8f1d8fc1d17e541dad5d55d237188b2eeccdb0"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P0-002/task-context.json",
|
||||
"sha256": "31598efe1d88e4f70431c413ab98f793c3fe41fcfe2d55fcfa6de3f95c229f6d"
|
||||
},
|
||||
"package": {
|
||||
"path": "web/package.json",
|
||||
"sha256": "40b7f14d4f568ae94bedde83e02115c127e0c714e5eb32a6a97b1e1084c4fa68"
|
||||
}
|
||||
},
|
||||
"nextTask": "WBV2-P0-003"
|
||||
}
|
||||
159012
tests/golden/WBV2-P0-002/parity-map.json
Normal file
159012
tests/golden/WBV2-P0-002/parity-map.json
Normal file
File diff suppressed because it is too large
Load Diff
12
tests/golden/WBV2-P0-002/source-hashes.json
Normal file
12
tests/golden/WBV2-P0-002/source-hashes.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P0-002",
|
||||
"sources": {
|
||||
"tests/golden/M15-02A/blender-parity-map.json": "f3e757f26e58a4252b6cc2a7f9275428bbe5bf659cc0f0ff6350a147bdf2809c",
|
||||
"tests/golden/M15-03A/next-task-plan.json": "bad0d7822c0d4d764bd174c86d9da897229e71de6363940125a594b8017e07f5",
|
||||
"tests/golden/M15-03A/completed-gap-tasks.json": "1dfc9c4ae8fb9a135e624ca4f9fe1ea10500ef16a2567a3cccdcfe48fbc38466",
|
||||
"docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0",
|
||||
"docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json": "c14e01161876ab924c1fe68466c78481fb583d1b822399ffa9f1df1b1d6fb266",
|
||||
"tests/golden/WBV2-P0-001/manifest.json": "09ffbe342f2c510500767ddaa02b18703c25f6c1ee0b2ebd0c563e260c0d0c2b"
|
||||
}
|
||||
}
|
||||
173
tests/golden/WBV2-P0-002/task-context.json
Normal file
173
tests/golden/WBV2-P0-002/task-context.json
Normal file
@@ -0,0 +1,173 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P0-002",
|
||||
"parentTask": "WBV2-P0-001",
|
||||
"status": "in_progress",
|
||||
"goal": "Generate a deterministic Blender 5.2 inventory and map each entry to a capability",
|
||||
"scope": {
|
||||
"gap": "workflow:blender52-inventory",
|
||||
"ownerFamily": "PARITY",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/generate-wbv2-inventory.mjs",
|
||||
"node tools/web/check-wbv2-inventory.mjs",
|
||||
"node tools/web/check-execution-control-plane.mjs",
|
||||
"node tools/web/check-web-parity-v2-plan.mjs",
|
||||
"node tools/web/check-corrective-plan.mjs",
|
||||
"npm --prefix web run test:context-governance"
|
||||
],
|
||||
"inputPaths": [
|
||||
"tests/golden/corrective/C5-003/capability-manifest.json",
|
||||
"tests/golden/corrective/C5-003/coverage-report.json",
|
||||
"tests/golden/corrective/C5-003/inventory-gate.log"
|
||||
],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2745,
|
||||
"contextRemainingTokens": 684
|
||||
},
|
||||
"source": {
|
||||
"bytes": 7159,
|
||||
"tokens": 1792
|
||||
},
|
||||
"selected": [
|
||||
{
|
||||
"path": "tests/golden/corrective/C5-003/capability-manifest.json",
|
||||
"bytes": 1619,
|
||||
"tokens": 405
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/corrective/C5-003/coverage-report.json",
|
||||
"bytes": 683,
|
||||
"tokens": 171
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/corrective/C5-003/inventory-gate.log",
|
||||
"bytes": 87,
|
||||
"tokens": 22
|
||||
}
|
||||
],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "docs/BLENDER_WEB_EXECUTION_CONTROL_PLANE.md",
|
||||
"bytes": 3686,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 3,
|
||||
"bytes": 2389,
|
||||
"tokens": 598
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"unknown entries are classified",
|
||||
"inventory is deterministic",
|
||||
"no entry claims feature parity without evidence"
|
||||
],
|
||||
"nextTask": "WBV2-P0-003",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P0-002.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P0-001/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P0-001.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P0-002.md",
|
||||
"tests/golden/WBV2-P0-001/manifest.json",
|
||||
"docs/status/WBV2-P0-001.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P0-001",
|
||||
"parentTask": "WBV2-BASELINE",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P0-002",
|
||||
"artifactCount": 6
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P0-001 Status",
|
||||
"status: done",
|
||||
"task: reconcile_scope_and_checkpoints",
|
||||
"gate: G0",
|
||||
"updated: 2026-08-24 America/New_York",
|
||||
"The production queue is now capability-oriented. `WBV2-P0-001` is the only ready",
|
||||
"task and is parented by the new transition baseline. The legacy M16 list remains",
|
||||
"an immutable coverage lane with `M16-GAP-00282` as its checkpoint; its manifests,"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 2186,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 56,
|
||||
"taskTokens": 547
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P0-002.md",
|
||||
"bytes": 2186,
|
||||
"lines": 56,
|
||||
"tokens": 547
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P0-001/manifest.json",
|
||||
"bytes": 1209,
|
||||
"lines": 20,
|
||||
"tokens": 303
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P0-001.md",
|
||||
"bytes": 965,
|
||||
"lines": 23,
|
||||
"tokens": 242
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1792,
|
||||
"evidenceFiles": 3,
|
||||
"evidenceBytes": 2389,
|
||||
"evidenceTokens": 598,
|
||||
"totalTokens": 2390,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3414,
|
||||
"serializedContextTokens": 789,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"contract": {
|
||||
"budget": {
|
||||
"maxErrors": 8,
|
||||
"maxMessageBytes": 256,
|
||||
"maxUnknownFields": 16
|
||||
},
|
||||
"cancellation": {
|
||||
"code": "OPEN_CANCELLED",
|
||||
"preservesRevision": true
|
||||
},
|
||||
"capability": {
|
||||
"level": "L0",
|
||||
"status": "BOUNDED"
|
||||
},
|
||||
"contractId": "workflow:freeze_capability_error_budget_contract",
|
||||
"errors": [
|
||||
{
|
||||
"code": "PROTOCOL_MISMATCH",
|
||||
"recoverable": true,
|
||||
"severity": "error"
|
||||
},
|
||||
{
|
||||
"code": "REVISION_CONFLICT",
|
||||
"recoverable": true,
|
||||
"severity": "error"
|
||||
},
|
||||
{
|
||||
"code": "OPEN_CANCELLED",
|
||||
"recoverable": true,
|
||||
"severity": "info"
|
||||
},
|
||||
{
|
||||
"code": "CAPABILITY_CONTRACT_INVALID",
|
||||
"recoverable": true,
|
||||
"severity": "error"
|
||||
},
|
||||
{
|
||||
"code": "CAPABILITY_CONTRACT_BUDGET_EXCEEDED",
|
||||
"recoverable": true,
|
||||
"severity": "error"
|
||||
},
|
||||
{
|
||||
"code": "CAPABILITY_CONTRACT_UNSUPPORTED",
|
||||
"recoverable": false,
|
||||
"severity": "error"
|
||||
},
|
||||
{
|
||||
"code": "CAPABILITY_CONTRACT_SCHEMA_HASH_MISMATCH",
|
||||
"recoverable": false,
|
||||
"severity": "fatal"
|
||||
},
|
||||
{
|
||||
"code": "CAPABILITY_CONTRACT_MIGRATION_BLOCKED",
|
||||
"recoverable": true,
|
||||
"severity": "error"
|
||||
}
|
||||
],
|
||||
"extensions": {
|
||||
"futureField": {
|
||||
"kind": "opaque",
|
||||
"value": "preserve-me"
|
||||
}
|
||||
},
|
||||
"migration": {
|
||||
"currentSchemaVersion": 1,
|
||||
"preserveUnknown": true,
|
||||
"strategy": "RETAIN_UNKNOWN",
|
||||
"supportedSchemaVersions": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"revision": {
|
||||
"base": 0,
|
||||
"current": 1
|
||||
},
|
||||
"schemaHash": "0ff3b488a0bc722f0e9cc5e8ad2b50105630517819e3f5e21686590bbf77b5d7",
|
||||
"schemaVersion": 1
|
||||
},
|
||||
"fixtureSha256": "ffc4a6635abd4f6d905945da8f79d475f5947d38df16e64a18740e443b6f111c",
|
||||
"operation": "CAPABILITY_ERROR_BUDGET_CONTRACT_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"sourceSha256": "e9449b75b8010caf19c37001e403ce842aa73f7612db5c11ad56399316d0decd",
|
||||
"task": "WBV2-P0-003"
|
||||
}
|
||||
35
tests/golden/WBV2-P0-003/capability-contract-report.json
Normal file
35
tests/golden/WBV2-P0-003/capability-contract-report.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P0-003",
|
||||
"operation": "CAPABILITY_ERROR_BUDGET_CONTRACT_LOCAL_BOUNDED",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P0-003-workflow-freeze_capability_error_budget_contract.blend",
|
||||
"sha256": "ffc4a6635abd4f6d905945da8f79d475f5947d38df16e64a18740e443b6f111c"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P0-003/capability-contract-desktop-report.json",
|
||||
"sourceSha256": "e9449b75b8010caf19c37001e403ce842aa73f7612db5c11ad56399316d0decd",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"contractId": "workflow:freeze_capability_error_budget_contract",
|
||||
"capabilityContractStatus": "AVAILABLE",
|
||||
"revision": 1,
|
||||
"schemaHash": "0ff3b488a0bc722f0e9cc5e8ad2b50105630517819e3f5e21686590bbf77b5d7",
|
||||
"unknownExtension": {
|
||||
"kind": "opaque",
|
||||
"value": "preserve-me"
|
||||
}
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"negative": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"unsupportedSchema": "REJECTED_BEFORE_COMMIT",
|
||||
"duplicateErrorCode": "REJECTED_BEFORE_COMMIT",
|
||||
"overBudget": "REJECTED_BEFORE_COMMIT",
|
||||
"schemaHashDrift": "REJECTED_BEFORE_COMMIT"
|
||||
},
|
||||
"nextTask": "WBV2-P1-001"
|
||||
}
|
||||
84
tests/golden/WBV2-P0-003/manifest.json
Normal file
84
tests/golden/WBV2-P0-003/manifest.json
Normal file
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P0-003",
|
||||
"parentTask": "WBV2-P0-002",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "CAPABILITY_ERROR_BUDGET_CONTRACT_LOCAL_BOUNDED",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P0-002/manifest.json",
|
||||
"sha256": "81ad5bf876000b370b619e58e03f6f2225106f16c5e780ff56a218bed7348fd9"
|
||||
},
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P0-003-workflow-freeze_capability_error_budget_contract.blend",
|
||||
"sha256": "ffc4a6635abd4f6d905945da8f79d475f5947d38df16e64a18740e443b6f111c"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generated/WBV2-P0-003.py",
|
||||
"sha256": "454be89d67593478666392f5d9eaa819602b0d7022abc1fd455b05d97ad0ca15"
|
||||
},
|
||||
"desktopChecker": {
|
||||
"path": "tools/web/check-wbv2-p0-003-desktop.py",
|
||||
"sha256": "964c192dddc19184281fa9a70b51a6d6caf48faa637e25aaca20d9d51bcfe00d"
|
||||
},
|
||||
"productionReader": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"sha256": "4e77fe6a1eb699432c8c5a8fbaae38b223f44a4cdcb314d624e2d2d4c3d570fa"
|
||||
},
|
||||
"protocol": {
|
||||
"path": "web/protocol/capability-contract.ts",
|
||||
"sha256": "4e222d854a1b14f35f1f1df0864fcc40a2e6ed5047a6efd6954437b1f7177ed2"
|
||||
},
|
||||
"checker": {
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"sha256": "19b7ba97bcd86e62dfba2a536d63a041bed9b39b491efc3d115fe58436d2c968"
|
||||
},
|
||||
"preflight": {
|
||||
"path": "tools/web/generated-gap-preflight.mjs",
|
||||
"sha256": "80fcb4b02c68de2703e6565debeafc7ee7d4c04bec125054be9e6e96da5c2ee9"
|
||||
},
|
||||
"wasmJavaScript": {
|
||||
"path": "web/app/src/vendor/blender/web_engine.js",
|
||||
"sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"
|
||||
},
|
||||
"wasmBinary": {
|
||||
"path": "web/app/src/vendor/blender/web_engine.wasm",
|
||||
"sha256": "63877fb8e5ad0fa6ffbe9a69c7f3a66c8997a59fe959bbefda185eb0bb6d0ab6"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P0-003/capability-contract-report.json",
|
||||
"sha256": "436127af44928dfbfec193229789c64c12e98af6ba2035c572712d22071e49bc"
|
||||
},
|
||||
"desktopReport": {
|
||||
"path": "tests/golden/WBV2-P0-003/capability-contract-desktop-report.json",
|
||||
"sha256": "3034e12d108a1126fab48a20ec75168a86ba1c3c0ec8a91f15f7792fba560e39"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P0-003.md",
|
||||
"sha256": "39d11525bd87d18314c4e81a6b8f53cbf966cabe5a70644863d52fdf7e5eb2fc"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P0-003/task-context.json",
|
||||
"sha256": "c69a3ada239f203da4fc623f472e9b1693fc6ccd3dab68767eca641794527135"
|
||||
},
|
||||
"wasmBuildLog": {
|
||||
"path": "tests/golden/WBV2-P0-003/wasm-build.log",
|
||||
"sha256": "d278f1482e53384fe9e4863bb58a2d40bfaacd736720ace1e93a96c53790f227"
|
||||
},
|
||||
"commandLog": {
|
||||
"path": "tests/golden/WBV2-P0-003/command.log",
|
||||
"sha256": "4e0e99bcb98f1d7277c0ac3ce0acc59f778428df27efa744ab38f91e6de6216f"
|
||||
}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"unsupportedSchema": "REJECTED_BEFORE_COMMIT",
|
||||
"duplicateErrorCode": "REJECTED_BEFORE_COMMIT",
|
||||
"overBudget": "REJECTED_BEFORE_COMMIT",
|
||||
"schemaHashDrift": "REJECTED_BEFORE_COMMIT"
|
||||
},
|
||||
"nextTask": "WBV2-P1-001"
|
||||
}
|
||||
180
tests/golden/WBV2-P0-003/task-context.json
Normal file
180
tests/golden/WBV2-P0-003/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P0-003",
|
||||
"parentTask": "WBV2-P0-002",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable workflow:freeze_capability_error_budget_contract data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "workflow:freeze_capability_error_budget_contract",
|
||||
"ownerFamily": "PROTOCOL",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P0-003.py -- tests/files/web/generated/WBV2-P0-003-workflow-freeze_capability_error_budget_contract.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P0-003",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P0-003"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2360,
|
||||
"contextRemainingTokens": 589
|
||||
},
|
||||
"source": {
|
||||
"bytes": 7544,
|
||||
"tokens": 1887
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P0-003-workflow-freeze_capability_error_budget_contract.blend",
|
||||
"bytes": 86455,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P0-003.py",
|
||||
"bytes": 2446,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 244962,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 854257,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P0-003/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P0-003.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P0-003/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"unsupported input fails closed",
|
||||
"schema hashes are stable",
|
||||
"migration policy preserves unknown data"
|
||||
],
|
||||
"nextTask": "WBV2-P1-001",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P0-003.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P0-002/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P0-002.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P0-003.md",
|
||||
"tests/golden/WBV2-P0-002/manifest.json",
|
||||
"docs/status/WBV2-P0-002.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P0-002",
|
||||
"parentTask": "WBV2-P0-001",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P0-003",
|
||||
"artifactCount": 10
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P0-002 Status",
|
||||
"status: done",
|
||||
"task: WBV2-P0-002",
|
||||
"gate: G0",
|
||||
"updated: 2026-08-24 America/New_York",
|
||||
"The Blender 5.2 baseline is now represented by one deterministic capability map.",
|
||||
"The map covers 6900 immutable legacy entries in 15 capability families, with 281 completed legacy receipts and 6618 pending coverage records. Every entry remains L0 and METADATA_ONLY; no inventory row claims browser feature parity. Unknown entries are explicit and cannot advance a capability.",
|
||||
"Source inventories and legacy states are hash-bound. The old M15/M16 manifests remain unchanged, and the capability lane only consumes them as read-only evidence."
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1860,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 465
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P0-003.md",
|
||||
"bytes": 1860,
|
||||
"lines": 38,
|
||||
"tokens": 465
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P0-002/manifest.json",
|
||||
"bytes": 1931,
|
||||
"lines": 54,
|
||||
"tokens": 483
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P0-002.md",
|
||||
"bytes": 954,
|
||||
"lines": 22,
|
||||
"tokens": 239
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1887,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1887,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2911,
|
||||
"serializedContextTokens": 710,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
33
tests/golden/WBV2-P1-001/manifest.json
Normal file
33
tests/golden/WBV2-P1-001/manifest.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-001",
|
||||
"parentTask": "WBV2-P0-003",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "RUNTIME_VARIANTS_SOURCE_RECEIPTS_LOCAL_BOUNDED",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P0-003/manifest.json", "sha256": "130290eb166e2087c9d7736b8f027f494e611dceabb610a89dd0b5469e4f90b2"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P1-001-workflow-stabilize_runtime_variants_and_source_receipts.blend", "sha256": "1f800845bad994e158a55c6a934f243d3b7c30a54c98887e6b35848ceb50e9e4"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P1-001.py", "sha256": "bcc236ffa1661c2c9cb88de680d2cb2b00111e1da282e8a9425ea575b0d016b2"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p1-001-desktop.py", "sha256": "8beddab3c701b221d9d0645b8e3df081e6f5c7fbb683d9983f4a31fbf2273155"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4e77fe6a1eb699432c8c5a8fbaae38b223f44a4cdcb314d624e2d2d4c3d570fa"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "19b7ba97bcd86e62dfba2a536d63a041bed9b39b491efc3d115fe58436d2c968"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "80fcb4b02c68de2703e6565debeafc7ee7d4c04bec125054be9e6e96da5c2ee9"},
|
||||
"engineManifest": {"path": "web/app/public/engine-manifest.json", "sha256": "7656936afae05b4936d7c8fa8dde94ee9e09ffff3a2c5e6f1b9d8a38f043ac47"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "63877fb8e5ad0fa6ffbe9a69c7f3a66c8997a59fe959bbefda185eb0bb6d0ab6"},
|
||||
"report": {"path": "tests/golden/WBV2-P1-001/runtime-receipt-report.json", "sha256": "9c563f9bcd74e194804a383e9fd96476a7b0d07dcd5bc961a21ce31192371f34"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P1-001/runtime-receipt-desktop-report.json", "sha256": "80562d52ae82a067a9c3f9437d67a23354531131e259680660e1ddd1ca9a5f07"},
|
||||
"status": {"path": "docs/status/WBV2-P1-001.md", "sha256": "5f5a8f3870fbcaf1b2716b3c708a02e6f90f3f55aef5580d1363023da63c9581"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P1-001/task-context.json", "sha256": "b0b931a880ea49c1fef80777329cb567dd6c36c067480e0a189f5dd44cb7b641"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P1-001/command.log", "sha256": "dc1ecaf30a4fde3b0f9051989841d7fbf8dc7161571c57c59510d5486653de1d"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"variantHashDrift": "REJECTED_BEFORE_INITIALIZATION",
|
||||
"releaseMismatch": "REFRESH_REQUIRED_BEFORE_INITIALIZATION",
|
||||
"pthreadFailure": "CLEANED_THEN_SINGLE_FALLBACK",
|
||||
"generation": "ONE_ENGINE_PER_SESSION"
|
||||
},
|
||||
"nextTask": "WBV2-P1-002"
|
||||
}
|
||||
77
tests/golden/WBV2-P1-001/runtime-receipt-desktop-report.json
Normal file
77
tests/golden/WBV2-P1-001/runtime-receipt-desktop-report.json
Normal file
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"fixtureSha256": "1f800845bad994e158a55c6a934f243d3b7c30a54c98887e6b35848ceb50e9e4",
|
||||
"operation": "RUNTIME_VARIANTS_SOURCE_RECEIPT_DESKTOP",
|
||||
"receipt": {
|
||||
"buildSha256": "63877fb8e5ad0fa6ffbe9a69c7f3a66c8997a59fe959bbefda185eb0bb6d0ab6",
|
||||
"engineVersion": "blender-wasm-0.1.0-rc.1",
|
||||
"extensions": {
|
||||
"futureField": {
|
||||
"kind": "opaque",
|
||||
"value": "preserve-me"
|
||||
}
|
||||
},
|
||||
"fallback": {
|
||||
"deterministicOrder": [
|
||||
"pthread",
|
||||
"single"
|
||||
],
|
||||
"policy": "AUTO",
|
||||
"reasonCode": "PTHREAD_INITIALIZATION_FAILED"
|
||||
},
|
||||
"receiptId": "workflow:stabilize_runtime_variants_and_source_receipts",
|
||||
"releaseId": "blender-wasm-0.1.0-rc.1",
|
||||
"schemaVersion": 1,
|
||||
"session": {
|
||||
"generation": 1,
|
||||
"oneEnginePerSession": true
|
||||
},
|
||||
"sourceSha256": "4e77fe6a1eb699432c8c5a8fbaae38b223f44a4cdcb314d624e2d2d4c3d570fa",
|
||||
"variants": [
|
||||
{
|
||||
"id": "single",
|
||||
"memory": {
|
||||
"initialPages": 256,
|
||||
"maximumPages": 32768,
|
||||
"shared": false
|
||||
},
|
||||
"resources": {
|
||||
"js": {
|
||||
"sha256": "25aa51361aa8c95479873240c776d6213c1092dd480ee2a0036d2cbbd561dcad",
|
||||
"url": "/vendor/blender/single/web_engine.js"
|
||||
},
|
||||
"wasm": {
|
||||
"sha256": "7f3a50f1d41b2ac0e6366e84caaabefc3cdfc47c055d5ea459abec654da6fcc0",
|
||||
"url": "/vendor/blender/single/web_engine.wasm"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "pthread",
|
||||
"memory": {
|
||||
"initialPages": 256,
|
||||
"maximumPages": 32768,
|
||||
"shared": true
|
||||
},
|
||||
"resources": {
|
||||
"js": {
|
||||
"sha256": "a64288eeb74fb0696d38d785348f0ba37e7ae716b5a341bf181f178f78e1324d",
|
||||
"url": "/vendor/blender/pthread/web_engine.js"
|
||||
},
|
||||
"pthreadWorker": {
|
||||
"sha256": "a64288eeb74fb0696d38d785348f0ba37e7ae716b5a341bf181f178f78e1324d",
|
||||
"url": "/vendor/blender/pthread/web_engine.js"
|
||||
},
|
||||
"wasm": {
|
||||
"sha256": "f2a26a9221b5d4d5e710463a89e2d93faf9b2d8a9076a455c5ce1a0e52d88b5f",
|
||||
"url": "/vendor/blender/pthread/web_engine.wasm"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"sourceSha256": "21cc1defb5d3cfd31c925baf80e963ac3a041315f144d1069931d00ae888c3bd",
|
||||
"task": "WBV2-P1-001"
|
||||
}
|
||||
37
tests/golden/WBV2-P1-001/runtime-receipt-report.json
Normal file
37
tests/golden/WBV2-P1-001/runtime-receipt-report.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-001",
|
||||
"operation": "RUNTIME_VARIANTS_SOURCE_RECEIPTS_LOCAL_BOUNDED",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P1-001-workflow-stabilize_runtime_variants_and_source_receipts.blend",
|
||||
"sha256": "1f800845bad994e158a55c6a934f243d3b7c30a54c98887e6b35848ceb50e9e4"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P1-001/runtime-receipt-desktop-report.json",
|
||||
"sourceSha256": "21cc1defb5d3cfd31c925baf80e963ac3a041315f144d1069931d00ae888c3bd",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"receiptId": "workflow:stabilize_runtime_variants_and_source_receipts",
|
||||
"releaseId": "blender-wasm-0.1.0-rc.1",
|
||||
"sourceSha256": "4e77fe6a1eb699432c8c5a8fbaae38b223f44a4cdcb314d624e2d2d4c3d570fa",
|
||||
"buildSha256": "63877fb8e5ad0fa6ffbe9a69c7f3a66c8997a59fe959bbefda185eb0bb6d0ab6",
|
||||
"variants": [
|
||||
"single",
|
||||
"pthread"
|
||||
],
|
||||
"generation": 1
|
||||
},
|
||||
"fallback": {
|
||||
"policy": "AUTO",
|
||||
"order": [
|
||||
"pthread",
|
||||
"single"
|
||||
],
|
||||
"reasonCode": "PTHREAD_INITIALIZATION_FAILED"
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"nextTask": "WBV2-P1-002"
|
||||
}
|
||||
180
tests/golden/WBV2-P1-001/task-context.json
Normal file
180
tests/golden/WBV2-P1-001/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-001",
|
||||
"parentTask": "WBV2-P0-003",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable workflow:stabilize_runtime_variants_and_source_receipts data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "workflow:stabilize_runtime_variants_and_source_receipts",
|
||||
"ownerFamily": "RUNTIME",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P1-001.py -- tests/files/web/generated/WBV2-P1-001-workflow-stabilize_runtime_variants_and_source_receipts.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P1-001",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P1-001"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 58,
|
||||
"contextRemainingTokens": 13
|
||||
},
|
||||
"source": {
|
||||
"bytes": 9846,
|
||||
"tokens": 2463
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P1-001-workflow-stabilize_runtime_variants_and_source_receipts.blend",
|
||||
"bytes": 86633,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P1-001.py",
|
||||
"bytes": 2356,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 246656,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 858820,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-001/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1-001.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-001/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"variant fallback is deterministic",
|
||||
"source/build hash is verified",
|
||||
"one engine session has one generation"
|
||||
],
|
||||
"nextTask": "WBV2-P1-002",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P1-001.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P0-003/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P0-003.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P1-001.md",
|
||||
"tests/golden/WBV2-P0-003/manifest.json",
|
||||
"docs/status/WBV2-P0-003.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P0-003",
|
||||
"parentTask": "WBV2-P0-002",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P1-001",
|
||||
"artifactCount": 16
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P0-003 Status",
|
||||
"status: done",
|
||||
"task: WBV2-P0-003",
|
||||
"gate: G0",
|
||||
"updated: 2026-08-24 America/New_York",
|
||||
"The capability error-budget contract is now a versioned, bounded protocol slice.",
|
||||
"The minimal fixture stores one canonical contract Text datablock with stable",
|
||||
"schema and source hashes, an explicit revision, error budget, cancellation"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1894,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 474
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P1-001.md",
|
||||
"bytes": 1894,
|
||||
"lines": 38,
|
||||
"tokens": 474
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P0-003/manifest.json",
|
||||
"bytes": 3359,
|
||||
"lines": 85,
|
||||
"tokens": 840
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P0-003.md",
|
||||
"bytes": 1794,
|
||||
"lines": 40,
|
||||
"tokens": 449
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2463,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2463,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3487,
|
||||
"serializedContextTokens": 717,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
31
tests/golden/WBV2-P1-002/manifest.json
Normal file
31
tests/golden/WBV2-P1-002/manifest.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-002",
|
||||
"parentTask": "WBV2-P1-001",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "SCENEIR_STABLE_IDS_BINARY_DELTAS_LOCAL_EXACT",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P1-001/manifest.json", "sha256": "b40c32066ac0667729465568135edde25d8ca94f97d74b613efb94acc8a4b75d"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P1-002-workflow-unify_sceneir_stable_ids_and_binary_deltas.blend", "sha256": "09c4d34f7faf8b175f8a59ecb533ebee61ac9821447c522e8fd41d7892ea9b34"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P1-002.py", "sha256": "1913654f70a429842977e62871ba9c1f8f009e1cdca3df0455f0400c52e9e7df"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p1-002-desktop.py", "sha256": "1db18c365d8e70b5e25896eb9d363bea1d504c8d4a7f18c1527a67eafa9a4095"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4e77fe6a1eb699432c8c5a8fbaae38b223f44a4cdcb314d624e2d2d4c3d570fa"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "19b7ba97bcd86e62dfba2a536d63a041bed9b39b491efc3d115fe58436d2c968"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "80fcb4b02c68de2703e6565debeafc7ee7d4c04bec125054be9e6e96da5c2ee9"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "63877fb8e5ad0fa6ffbe9a69c7f3a66c8997a59fe959bbefda185eb0bb6d0ab6"},
|
||||
"report": {"path": "tests/golden/WBV2-P1-002/sceneir-report.json", "sha256": "c30e5dfe2e5dd714e6b48e0c27ad2ee22aa003cac252bbff3c8550325ca93bd0"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P1-002/sceneir-desktop-report.json", "sha256": "db22f68fbe399dd79eb5b6c9496af114d1d724b37f07796f9a2427e1d2965978"},
|
||||
"status": {"path": "docs/status/WBV2-P1-002.md", "sha256": "848d9dc0dd95636a3622941507d6f53cb72bfdcb9ac38d6e6bcaf58231ae921f"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P1-002/task-context.json", "sha256": "891be94ecf48e2301636d6156025dbfee1485059094d88db6b880394f8d5a79d"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P1-002/command.log", "sha256": "6c3ddca300d57c3392259f7e77c361fdbdc9397f8c0427c9801ab1f39bcb3a7e"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"stableIds": "PRESERVED_AFTER_SAVE_REOPEN",
|
||||
"canonicalHash": "DESKTOP_WASM_EXACT"
|
||||
},
|
||||
"nextTask": "WBV2-P1-003"
|
||||
}
|
||||
42
tests/golden/WBV2-P1-002/sceneir-desktop-report.json
Normal file
42
tests/golden/WBV2-P1-002/sceneir-desktop-report.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"contract": {
|
||||
"binaryDelta": {
|
||||
"baseRevision": 1,
|
||||
"generation": 1,
|
||||
"patches": [
|
||||
{
|
||||
"byteLength": 12,
|
||||
"byteOffset": 0,
|
||||
"field": "positions"
|
||||
}
|
||||
],
|
||||
"schemaVersion": 1
|
||||
},
|
||||
"contractId": "workflow:unify_sceneir_stable_ids_and_binary_deltas",
|
||||
"extensions": {
|
||||
"futureField": {
|
||||
"kind": "opaque",
|
||||
"value": "preserve-me"
|
||||
}
|
||||
},
|
||||
"schemaVersion": 1,
|
||||
"stableIds": {
|
||||
"meshId": "mesh:WBV2P1002CubeMesh",
|
||||
"objectId": "object:WBV2P1002CubeObject"
|
||||
}
|
||||
},
|
||||
"fixtureSha256": "09c4d34f7faf8b175f8a59ecb533ebee61ac9821447c522e8fd41d7892ea9b34",
|
||||
"operation": "SCENEIR_STABLE_IDS_BINARY_DELTA_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"sourceSha256": "5836471c64adf311867303d3cf078a87fb2b2c0453ad531a77ca1b6f8595f202",
|
||||
"summary": {
|
||||
"meshId": "mesh:WBV2P1002CubeMesh",
|
||||
"objectId": "object:WBV2P1002CubeObject",
|
||||
"positionHash": "ab1104d5ac85e1b862a62835af7802096d98bfcc1f933a74b676ae6de297508e",
|
||||
"triangleCount": 12,
|
||||
"vertexCount": 8
|
||||
},
|
||||
"task": "WBV2-P1-002"
|
||||
}
|
||||
28
tests/golden/WBV2-P1-002/sceneir-report.json
Normal file
28
tests/golden/WBV2-P1-002/sceneir-report.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-002",
|
||||
"operation": "SCENEIR_STABLE_IDS_BINARY_DELTAS_LOCAL_EXACT",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P1-002-workflow-unify_sceneir_stable_ids_and_binary_deltas.blend",
|
||||
"sha256": "09c4d34f7faf8b175f8a59ecb533ebee61ac9821447c522e8fd41d7892ea9b34"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P1-002/sceneir-desktop-report.json",
|
||||
"sourceSha256": "5836471c64adf311867303d3cf078a87fb2b2c0453ad531a77ca1b6f8595f202",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"objectId": "object:WBV2P1002CubeObject",
|
||||
"meshId": "mesh:WBV2P1002CubeMesh",
|
||||
"vertexCount": 8,
|
||||
"triangleCount": 12,
|
||||
"canonicalHash": "a0dc01a164bfa12bd27da51db914d854409273a69a15defb6630fcf8e77e396e"
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"negative": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
|
||||
},
|
||||
"nextTask": "WBV2-P1-003"
|
||||
}
|
||||
180
tests/golden/WBV2-P1-002/task-context.json
Normal file
180
tests/golden/WBV2-P1-002/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-002",
|
||||
"parentTask": "WBV2-P1-001",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable workflow:unify_sceneir_stable_ids_and_binary_deltas data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "workflow:unify_sceneir_stable_ids_and_binary_deltas",
|
||||
"ownerFamily": "MAIN",
|
||||
"implementationClass": "LOCAL_EXACT"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P1-002.py -- tests/files/web/generated/WBV2-P1-002-workflow-unify_sceneir_stable_ids_and_binary_deltas.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P1-002",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P1-002"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 1112,
|
||||
"contextRemainingTokens": 277
|
||||
},
|
||||
"source": {
|
||||
"bytes": 8792,
|
||||
"tokens": 2199
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P1-002-workflow-unify_sceneir_stable_ids_and_binary_deltas.blend",
|
||||
"bytes": 86861,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P1-002.py",
|
||||
"bytes": 1736,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 246656,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 863349,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-002/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1-002.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-002/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"IDs survive save/reopen",
|
||||
"malformed chunk is rejected",
|
||||
"desktop and WASM canonical hashes match"
|
||||
],
|
||||
"nextTask": "WBV2-P1-003",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P1-002.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P1-001/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P1-001.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P1-002.md",
|
||||
"tests/golden/WBV2-P1-001/manifest.json",
|
||||
"docs/status/WBV2-P1-001.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-001",
|
||||
"parentTask": "WBV2-P0-003",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P1-002",
|
||||
"artifactCount": 14
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P1-001 Status",
|
||||
"status: done",
|
||||
"task: WBV2-P1-001",
|
||||
"gate: G1",
|
||||
"updated: 2026-08-25 America/New_York",
|
||||
"The runtime receipt fixture binds the single and pthread variants to one",
|
||||
"release, pinned source/build hashes, explicit memory/resource hashes, a",
|
||||
"deterministic pthread-to-single fallback order, and one engine generation per"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1869,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 468
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P1-002.md",
|
||||
"bytes": 1869,
|
||||
"lines": 38,
|
||||
"tokens": 468
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-001/manifest.json",
|
||||
"bytes": 2740,
|
||||
"lines": 34,
|
||||
"tokens": 685
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1-001.md",
|
||||
"bytes": 1384,
|
||||
"lines": 33,
|
||||
"tokens": 346
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2199,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2199,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3223,
|
||||
"serializedContextTokens": 710,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
32
tests/golden/WBV2-P1-003/manifest.json
Normal file
32
tests/golden/WBV2-P1-003/manifest.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-003",
|
||||
"parentTask": "WBV2-P1-002",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "MAIN_TRANSACTION_HISTORY_SAVE_LOCAL_EXACT",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P1-002/manifest.json", "sha256": "456b93a29ae0ce65e1490e688e5a8563fbe4ba57ac104814f344ad6e7c2ec668"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P1-003-workflow-unify_main_transaction_history_and_save.blend", "sha256": "71f784357a7c65eea5525a14c2741a92a01cc255b5ffda0dd9ae0a86fffa8e88"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P1-003.py", "sha256": "1f014abd129a927f9cc5640387df8b3b7e59a68a3080cc8a8ea7137e8c354ce9"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p1-003-desktop.py", "sha256": "8303f691cad1d5991251a9c79bd003f7c510982f18843cd68d0aecfca483026a"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4e77fe6a1eb699432c8c5a8fbaae38b223f44a4cdcb314d624e2d2d4c3d570fa"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "19b7ba97bcd86e62dfba2a536d63a041bed9b39b491efc3d115fe58436d2c968"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "80fcb4b02c68de2703e6565debeafc7ee7d4c04bec125054be9e6e96da5c2ee9"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "63877fb8e5ad0fa6ffbe9a69c7f3a66c8997a59fe959bbefda185eb0bb6d0ab6"},
|
||||
"report": {"path": "tests/golden/WBV2-P1-003/transaction-report.json", "sha256": "28183baa4ee71827b0556a5b4e4bb9c35861a5f3f97da4623a69a03c0ada860f"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P1-003/transaction-desktop-report.json", "sha256": "325b5eedf9d4b94dbf3652d78c27bcb908c47f3acab3d271d108fb0920e36b8d"},
|
||||
"status": {"path": "docs/status/WBV2-P1-003.md", "sha256": "16862eadadb85109b21e24485bfb901fed453b202d64008ba5fb79ca04330570"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P1-003/task-context.json", "sha256": "309f8636a783ccb8a246bc5aa5e4e4dd4789865711b02017b442aa5af02f01a5"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P1-003/command.log", "sha256": "a23b25e16e8e2773bb76d9e3d3efdcff466b7a6541ae21628f6aa593b908fbf2"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"failedCommand": "NO_HISTORY_ENTRY",
|
||||
"staleRevision": "REJECTED_WITHOUT_MUTATION",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"saveHash": "BYTE_STABLE"
|
||||
},
|
||||
"nextTask": "WBV2-P1-004"
|
||||
}
|
||||
183
tests/golden/WBV2-P1-003/task-context.json
Normal file
183
tests/golden/WBV2-P1-003/task-context.json
Normal file
@@ -0,0 +1,183 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-003",
|
||||
"parentTask": "WBV2-P1-002",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable workflow:unify_main_transaction_history_and_save data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "workflow:unify_main_transaction_history_and_save",
|
||||
"ownerFamily": "MAIN",
|
||||
"implementationClass": "LOCAL_EXACT"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P1-003.py -- tests/files/web/generated/WBV2-P1-003-workflow-unify_main_transaction_history_and_save.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P1-003",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P1-003"
|
||||
],
|
||||
"inputPaths": [
|
||||
"tools/web/generated/WBV2-P1-003.py"
|
||||
],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 1646,
|
||||
"contextRemainingTokens": 410
|
||||
},
|
||||
"source": {
|
||||
"bytes": 8258,
|
||||
"tokens": 2066
|
||||
},
|
||||
"selected": [
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P1-003.py",
|
||||
"bytes": 1518,
|
||||
"tokens": 380
|
||||
}
|
||||
],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P1-003-workflow-unify_main_transaction_history_and_save.blend",
|
||||
"bytes": 86826,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 246656,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 868494,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-003/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1-003.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-003/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 1,
|
||||
"bytes": 1518,
|
||||
"tokens": 380
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"failed/no-op commands add no history",
|
||||
"stale revision cannot commit",
|
||||
"reopen state is byte/hash stable"
|
||||
],
|
||||
"nextTask": "WBV2-P1-004",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P1-003.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P1-002/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P1-002.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P1-003.md",
|
||||
"tests/golden/WBV2-P1-002/manifest.json",
|
||||
"docs/status/WBV2-P1-002.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-002",
|
||||
"parentTask": "WBV2-P1-001",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P1-003",
|
||||
"artifactCount": 13
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P1-002 Status",
|
||||
"status: done",
|
||||
"task: WBV2-P1-002",
|
||||
"gate: G1",
|
||||
"updated: 2026-08-25 America/New_York",
|
||||
"The minimal cube fixture exposes canonical SceneIR stable object/mesh IDs,",
|
||||
"topology counts, positions, and a bounded binary delta contract. Desktop and",
|
||||
"WASM/Main produce the same canonical summary and preserve it through"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1854,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 464
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P1-003.md",
|
||||
"bytes": 1854,
|
||||
"lines": 38,
|
||||
"tokens": 464
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-002/manifest.json",
|
||||
"bytes": 2495,
|
||||
"lines": 32,
|
||||
"tokens": 624
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1-002.md",
|
||||
"bytes": 1110,
|
||||
"lines": 28,
|
||||
"tokens": 278
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2066,
|
||||
"evidenceFiles": 1,
|
||||
"evidenceBytes": 1518,
|
||||
"evidenceTokens": 380,
|
||||
"totalTokens": 2446,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3470,
|
||||
"serializedContextTokens": 744,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
29
tests/golden/WBV2-P1-003/transaction-desktop-report.json
Normal file
29
tests/golden/WBV2-P1-003/transaction-desktop-report.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"contract": {
|
||||
"contractId": "workflow:unify_main_transaction_history_and_save",
|
||||
"history": {
|
||||
"failedCommandAddsHistory": false,
|
||||
"undoRedo": "SUPPORTED"
|
||||
},
|
||||
"initialVisibility": true,
|
||||
"mutation": {
|
||||
"command": "setObjectVisibility",
|
||||
"visible": false
|
||||
},
|
||||
"revision": {
|
||||
"staleCommit": "REJECTED"
|
||||
},
|
||||
"save": {
|
||||
"atomic": true,
|
||||
"byteStable": true
|
||||
},
|
||||
"schemaVersion": 1
|
||||
},
|
||||
"fixtureSha256": "71f784357a7c65eea5525a14c2741a92a01cc255b5ffda0dd9ae0a86fffa8e88",
|
||||
"objectId": "object:WBV2P1003CubeObject",
|
||||
"operation": "MAIN_TRANSACTION_HISTORY_SAVE_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-003"
|
||||
}
|
||||
32
tests/golden/WBV2-P1-003/transaction-report.json
Normal file
32
tests/golden/WBV2-P1-003/transaction-report.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-003",
|
||||
"operation": "MAIN_TRANSACTION_HISTORY_SAVE_LOCAL_EXACT",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P1-003-workflow-unify_main_transaction_history_and_save.blend",
|
||||
"sha256": "71f784357a7c65eea5525a14c2741a92a01cc255b5ffda0dd9ae0a86fffa8e88"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P1-003/transaction-desktop-report.json",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"objectId": "object:WBV2P1003CubeObject",
|
||||
"initialRevision": 1,
|
||||
"mutatedRevision": 2,
|
||||
"saveSha256": "8bfe012973f24edff2d1cc9c7e240e24fd9b0b97c133fdcabfadfd63427a363b"
|
||||
},
|
||||
"history": {
|
||||
"failedCommandAddsHistory": false,
|
||||
"undo": "EXACT",
|
||||
"redo": "EXACT",
|
||||
"staleRevision": "REJECTED"
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"negative": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
|
||||
},
|
||||
"nextTask": "WBV2-P1-004"
|
||||
}
|
||||
35
tests/golden/WBV2-P1-004/manifest.json
Normal file
35
tests/golden/WBV2-P1-004/manifest.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-004",
|
||||
"parentTask": "WBV2-P1-003",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "WORKER_CANCEL_RESTART_DISPOSE_LOCAL_BOUNDED",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P1-003/manifest.json", "sha256": "bcdd4835ddc3f668419f6f5d505e010a7404d3c129bf85f99f587daa648f2ae1"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P1-004-workflow-harden_worker_cancel_restart_and_dispose.blend", "sha256": "c17cf938451b7bdbcda9a04b1e6436f217269e3167804cc785fd0d32e2d9d4bb"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P1-004.py", "sha256": "beea3a224b47bc2c16de09805e778afd223da44f043a04929148cafcdfe3d67e"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p1-004-desktop.py", "sha256": "2c305e8cc4d2c4651343a40513a038d6a5ce4cd82159df4c7497698908bf2f79"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9aa7dd546473eaeb63e62dd3c9ccc6bfdbd50452f06201ad5bfa93cde661c375"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "8ea2d0ea85ad508fe447316e84ebc992c772b07907c61b0b23f6dac4800ad96e"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "9aa30f025af3bc0c1a690e7deaf6ed634179000b535019a7ab5571c463e14d6e"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "39f3e713d89fff92e1126108321ec1f102d777abf194404d4e2b27d31b123cb0"},
|
||||
"report": {"path": "tests/golden/WBV2-P1-004/worker-lifecycle-report.json", "sha256": "2587eae7937c8c6d2611cad8dc819d385ba43799a5897b2d48417e929bc31e52"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P1-004/worker-lifecycle-desktop-report.json", "sha256": "b8f7c388a5203fcf8abf56eff2d6ec685f69900a44f080e7529bf77a33edd7ad"},
|
||||
"status": {"path": "docs/status/WBV2-P1-004.md", "sha256": "479be7cdc89d63b476d2b293e27d90d54ee7b96bad79063e11d66bc3601417c3"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P1-004/task-context.json", "sha256": "879cb5c392344b6abad688011ae3f4ef9229727d64c9551628a94e3f442a3638"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P1-004/command.log", "sha256": "a6c1cdf44cf6feef1919a3621004ba37bd7b9e29dc652cd8ef6417caaa539c7a"},
|
||||
"wasmBuildLog": {"path": "tests/golden/WBV2-P1-004/wasm-build.log", "sha256": "6855f81eaebc59a24adce6f99171e849d56e994ade4b3f656fb05da666695652"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"hashDrift": "REJECTED_BEFORE_COMMIT",
|
||||
"cancelledResult": "NEVER_PUBLISHED",
|
||||
"generationMismatch": "REJECTED",
|
||||
"ownerBudgetAfterDispose": "ZERO"
|
||||
},
|
||||
"nextTask": "WBV2-P1-005"
|
||||
}
|
||||
180
tests/golden/WBV2-P1-004/task-context.json
Normal file
180
tests/golden/WBV2-P1-004/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-004",
|
||||
"parentTask": "WBV2-P1-003",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable workflow:harden_worker_cancel_restart_and_dispose data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "workflow:harden_worker_cancel_restart_and_dispose",
|
||||
"ownerFamily": "RUNTIME",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P1-004.py -- tests/files/web/generated/WBV2-P1-004-workflow-harden_worker_cancel_restart_and_dispose.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P1-004",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P1-004"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 1555,
|
||||
"contextRemainingTokens": 388
|
||||
},
|
||||
"source": {
|
||||
"bytes": 8349,
|
||||
"tokens": 2088
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P1-004-workflow-harden_worker_cancel_restart_and_dispose.blend",
|
||||
"bytes": 87052,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P1-004.py",
|
||||
"bytes": 2422,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 251180,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 872919,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-004/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1-004.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-004/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"cancel never publishes result",
|
||||
"generation mismatch is rejected",
|
||||
"CPU/WASM/GPU owners return to budget"
|
||||
],
|
||||
"nextTask": "WBV2-P1-005",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P1-004.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P1-003/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P1-003.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P1-004.md",
|
||||
"tests/golden/WBV2-P1-003/manifest.json",
|
||||
"docs/status/WBV2-P1-003.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-003",
|
||||
"parentTask": "WBV2-P1-002",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P1-004",
|
||||
"artifactCount": 13
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P1-003 Status",
|
||||
"status: done",
|
||||
"task: WBV2-P1-003",
|
||||
"gate: G1",
|
||||
"updated: 2026-08-25 America/New_York",
|
||||
"The transaction fixture verifies a bounded Main command history: failed",
|
||||
"commands do not create a history entry, valid visibility changes advance the",
|
||||
"revision, stale base revisions are rejected, undo/redo restore the exact"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1864,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 466
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P1-004.md",
|
||||
"bytes": 1864,
|
||||
"lines": 38,
|
||||
"tokens": 466
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-003/manifest.json",
|
||||
"bytes": 2528,
|
||||
"lines": 33,
|
||||
"tokens": 632
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1-003.md",
|
||||
"bytes": 1158,
|
||||
"lines": 30,
|
||||
"tokens": 290
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2088,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2088,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3112,
|
||||
"serializedContextTokens": 712,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"contract": {
|
||||
"budget": {
|
||||
"maxInputBytes": 1048576,
|
||||
"maxLiveRequests": 1,
|
||||
"releaseAfterCancel": true
|
||||
},
|
||||
"cancel": {
|
||||
"code": "OPEN_CANCELLED",
|
||||
"preservesRevision": true,
|
||||
"resultPublished": false
|
||||
},
|
||||
"contractId": "workflow:harden_worker_cancel_restart_and_dispose",
|
||||
"dispose": {
|
||||
"doubleDispose": "NOOP",
|
||||
"idempotent": true,
|
||||
"released": true
|
||||
},
|
||||
"extensions": {
|
||||
"futureField": {
|
||||
"kind": "opaque",
|
||||
"value": "preserve-me"
|
||||
}
|
||||
},
|
||||
"generation": {
|
||||
"afterRestart": 2,
|
||||
"initial": 1,
|
||||
"staleResult": "REJECTED"
|
||||
},
|
||||
"owners": {
|
||||
"cpu": {
|
||||
"afterCancel": 0,
|
||||
"afterDispose": 0,
|
||||
"afterRestart": 0,
|
||||
"peak": 1
|
||||
},
|
||||
"gpu": {
|
||||
"afterCancel": 0,
|
||||
"afterDispose": 0,
|
||||
"afterRestart": 0,
|
||||
"peak": 1
|
||||
},
|
||||
"wasm": {
|
||||
"afterCancel": 0,
|
||||
"afterDispose": 0,
|
||||
"afterRestart": 0,
|
||||
"peak": 1
|
||||
}
|
||||
},
|
||||
"schemaHash": "4567145720b21ffab0202d82584bc5ef41a829bc6a1be13683c35ed0115345ac",
|
||||
"schemaVersion": 1
|
||||
},
|
||||
"fixtureSha256": "c17cf938451b7bdbcda9a04b1e6436f217269e3167804cc785fd0d32e2d9d4bb",
|
||||
"operation": "WORKER_CANCEL_RESTART_DISPOSE_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"sourceSha256": "fe81c6faf84b9cc55ead37fd29dfeecd2bc8d279263ee14d6efffa1cef3e65ca",
|
||||
"task": "WBV2-P1-004"
|
||||
}
|
||||
62
tests/golden/WBV2-P1-004/worker-lifecycle-report.json
Normal file
62
tests/golden/WBV2-P1-004/worker-lifecycle-report.json
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-004",
|
||||
"operation": "WORKER_CANCEL_RESTART_DISPOSE_LOCAL_BOUNDED",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P1-004-workflow-harden_worker_cancel_restart_and_dispose.blend",
|
||||
"sha256": "c17cf938451b7bdbcda9a04b1e6436f217269e3167804cc785fd0d32e2d9d4bb"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P1-004/worker-lifecycle-desktop-report.json",
|
||||
"sourceSha256": "fe81c6faf84b9cc55ead37fd29dfeecd2bc8d279263ee14d6efffa1cef3e65ca",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"contractId": "workflow:harden_worker_cancel_restart_and_dispose",
|
||||
"workerLifecycleContractStatus": "AVAILABLE",
|
||||
"revision": 1,
|
||||
"generation": {
|
||||
"afterRestart": 2,
|
||||
"initial": 1,
|
||||
"staleResult": "REJECTED"
|
||||
}
|
||||
},
|
||||
"cancel": {
|
||||
"resultPublished": false,
|
||||
"code": "OPEN_CANCELLED",
|
||||
"staleResult": "REJECTED"
|
||||
},
|
||||
"owners": {
|
||||
"cpu": {
|
||||
"afterCancel": 0,
|
||||
"afterDispose": 0,
|
||||
"afterRestart": 0,
|
||||
"peak": 1
|
||||
},
|
||||
"gpu": {
|
||||
"afterCancel": 0,
|
||||
"afterDispose": 0,
|
||||
"afterRestart": 0,
|
||||
"peak": 1
|
||||
},
|
||||
"wasm": {
|
||||
"afterCancel": 0,
|
||||
"afterDispose": 0,
|
||||
"afterRestart": 0,
|
||||
"peak": 1
|
||||
}
|
||||
},
|
||||
"dispose": {
|
||||
"doubleDispose": "NOOP",
|
||||
"idempotent": true,
|
||||
"released": true
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"negative": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"hashDrift": "REJECTED_BEFORE_COMMIT"
|
||||
},
|
||||
"nextTask": "WBV2-P1-005"
|
||||
}
|
||||
35
tests/golden/WBV2-P1-005/manifest.json
Normal file
35
tests/golden/WBV2-P1-005/manifest.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-005",
|
||||
"parentTask": "WBV2-P1-004",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "STORAGE_JOURNAL_RECOVERY_LOCAL_BOUNDED",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P1-004/manifest.json", "sha256": "19d9cbcf2455df8ffad49907b1765aeab45d865bd33a5771ed16a153b29887a1"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P1-005-workflow-harden_opfs_indexeddb_journal_recovery.blend", "sha256": "07455729e45c5b59caddfd2b06dbe76296ef4cb90d558d8a6c345d96f12ebdda"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P1-005.py", "sha256": "de43529b8e5a593ae6e4d7794ab62b049dc19594ac898c0719a0f55cdc56f60d"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p1-005-desktop.py", "sha256": "5f0623982e94c4d7e61c3ededd8a37f9188d9165fad211af4473d604f4532676"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "5cd0dd03ee788f67fe2eb4543589fee4a47c21234a419a6f18b1e3e0c3a3c2e4"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "b9b14de9b38e894d607d851eda3a868c1936529c48f035bbf92a5738905f68f3"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "4df07c381505d7c06050f568c13905d053e7b02294bd210ac162a2dd32e3074b"},
|
||||
"report": {"path": "tests/golden/WBV2-P1-005/storage-journal-report.json", "sha256": "4dcbc6e11868610d71bde782fbfbb84bfd94afdd6168e588d4a4e51cfd728c34"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P1-005/storage-journal-desktop-report.json", "sha256": "c328c0ce9e3a672c79ae21fdbe5f369ce58bd02d3e818f769b395287708c1eed"},
|
||||
"status": {"path": "docs/status/WBV2-P1-005.md", "sha256": "b779068972c37706472da7090c2a58f222e0127430c38880ca524a41cdb4da13"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P1-005/task-context.json", "sha256": "b8353597bffc19c8e005c4ca979916a12fd6cecab6c5e7e42b639e447000c287"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P1-005/command.log", "sha256": "582cbd1a810f1bf7c79948bff064949a6be65093602524ce0e04ffeed61052c1"},
|
||||
"wasmBuildLog": {"path": "tests/golden/WBV2-P1-005/wasm-build.log", "sha256": "7f21f5446576da369e7d925095695103e12be1afdec7a7e899a1d42e468fc74c"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"interruptedCommit": "OLD_PROJECT_USABLE",
|
||||
"hashMismatch": "QUARANTINED",
|
||||
"restart": "RECOVERED",
|
||||
"storageAfterRecovery": "ZERO"
|
||||
},
|
||||
"nextTask": "WBV2-P2-001"
|
||||
}
|
||||
53
tests/golden/WBV2-P1-005/storage-journal-desktop-report.json
Normal file
53
tests/golden/WBV2-P1-005/storage-journal-desktop-report.json
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"contract": {
|
||||
"budget": {
|
||||
"maxJournalEntries": 32,
|
||||
"maxProjectBytes": 4194304
|
||||
},
|
||||
"contractId": "workflow:harden_opfs_indexeddb_journal_recovery",
|
||||
"extensions": {
|
||||
"futureField": {
|
||||
"kind": "opaque",
|
||||
"value": "preserve-me"
|
||||
}
|
||||
},
|
||||
"hash": {
|
||||
"expected": "sha256:project-revision-8",
|
||||
"mismatch": "QUARANTINED",
|
||||
"verified": false
|
||||
},
|
||||
"journal": {
|
||||
"interruptedAt": "BEFORE_PUBLISH",
|
||||
"oldProjectUsable": true,
|
||||
"oldRevision": 7,
|
||||
"recovery": "ROLLBACK_OLD_REVISION",
|
||||
"stagedRevision": 8
|
||||
},
|
||||
"restart": {
|
||||
"generationAfter": 2,
|
||||
"generationBefore": 1,
|
||||
"status": "RECOVERED"
|
||||
},
|
||||
"schemaHash": "c7655279da06b11a53cce4b378f578369e161da132d07b9078024dd6fc796150",
|
||||
"schemaVersion": 1,
|
||||
"storage": {
|
||||
"indexeddb": {
|
||||
"afterRecovery": 0,
|
||||
"journalEntriesBefore": 1,
|
||||
"metadataRevision": 7
|
||||
},
|
||||
"opfs": {
|
||||
"afterRecovery": 0,
|
||||
"projectReadable": true,
|
||||
"stagingFilesBefore": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"fixtureSha256": "07455729e45c5b59caddfd2b06dbe76296ef4cb90d558d8a6c345d96f12ebdda",
|
||||
"operation": "STORAGE_JOURNAL_RECOVERY_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"sourceSha256": "b590362998b513d9fa81acf2ee13308d0b16f8010a8fb13264082b963a9abf5b",
|
||||
"task": "WBV2-P1-005"
|
||||
}
|
||||
50
tests/golden/WBV2-P1-005/storage-journal-report.json
Normal file
50
tests/golden/WBV2-P1-005/storage-journal-report.json
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-005",
|
||||
"operation": "STORAGE_JOURNAL_RECOVERY_LOCAL_BOUNDED",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P1-005-workflow-harden_opfs_indexeddb_journal_recovery.blend",
|
||||
"sha256": "07455729e45c5b59caddfd2b06dbe76296ef4cb90d558d8a6c345d96f12ebdda"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P1-005/storage-journal-desktop-report.json",
|
||||
"sourceSha256": "b590362998b513d9fa81acf2ee13308d0b16f8010a8fb13264082b963a9abf5b",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"contractId": "workflow:harden_opfs_indexeddb_journal_recovery",
|
||||
"storageJournalContractStatus": "AVAILABLE",
|
||||
"revision": 1,
|
||||
"restart": {
|
||||
"generationAfter": 2,
|
||||
"generationBefore": 1,
|
||||
"status": "RECOVERED"
|
||||
}
|
||||
},
|
||||
"journal": {
|
||||
"interruptedCommit": "BEFORE_PUBLISH",
|
||||
"oldProjectUsable": true,
|
||||
"recovery": "ROLLBACK_OLD_REVISION"
|
||||
},
|
||||
"hashMismatch": "QUARANTINED",
|
||||
"storage": {
|
||||
"indexeddb": {
|
||||
"afterRecovery": 0,
|
||||
"journalEntriesBefore": 1,
|
||||
"metadataRevision": 7
|
||||
},
|
||||
"opfs": {
|
||||
"afterRecovery": 0,
|
||||
"projectReadable": true,
|
||||
"stagingFilesBefore": 1
|
||||
}
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"negative": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"hashMismatch": "QUARANTINED"
|
||||
},
|
||||
"nextTask": "WBV2-P2-001"
|
||||
}
|
||||
180
tests/golden/WBV2-P1-005/task-context.json
Normal file
180
tests/golden/WBV2-P1-005/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-005",
|
||||
"parentTask": "WBV2-P1-004",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable workflow:harden_opfs_indexeddb_journal_recovery data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "workflow:harden_opfs_indexeddb_journal_recovery",
|
||||
"ownerFamily": "STORAGE",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P1-005.py -- tests/files/web/generated/WBV2-P1-005-workflow-harden_opfs_indexeddb_journal_recovery.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P1-005",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P1-005"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 887,
|
||||
"contextRemainingTokens": 220
|
||||
},
|
||||
"source": {
|
||||
"bytes": 9017,
|
||||
"tokens": 2256
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P1-005-workflow-harden_opfs_indexeddb_journal_recovery.blend",
|
||||
"bytes": 87125,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P1-005.py",
|
||||
"bytes": 2336,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 255189,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 877157,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-005/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1-005.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-005/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"interrupted commit leaves old project usable",
|
||||
"hash mismatch quarantines payload",
|
||||
"small project recovers after restart"
|
||||
],
|
||||
"nextTask": "WBV2-P2-001",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P1-005.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P1-004/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P1-004.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P1-005.md",
|
||||
"tests/golden/WBV2-P1-004/manifest.json",
|
||||
"docs/status/WBV2-P1-004.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-004",
|
||||
"parentTask": "WBV2-P1-003",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P1-005",
|
||||
"artifactCount": 15
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P1-004 Status",
|
||||
"status: done",
|
||||
"task: WBV2-P1-004",
|
||||
"gate: G1",
|
||||
"updated: 2026-08-25 America/New_York",
|
||||
"The worker lifecycle fixture exposes a bounded cancellation/restart/dispose",
|
||||
"contract through the Blender Text datablock and the WASM SceneIR reader.",
|
||||
"Desktop and WASM agree that cancelled opens publish no result, stale results"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1854,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 464
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P1-005.md",
|
||||
"bytes": 1854,
|
||||
"lines": 38,
|
||||
"tokens": 464
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-004/manifest.json",
|
||||
"bytes": 2886,
|
||||
"lines": 36,
|
||||
"tokens": 722
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1-004.md",
|
||||
"bytes": 1478,
|
||||
"lines": 33,
|
||||
"tokens": 370
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2256,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2256,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3280,
|
||||
"serializedContextTokens": 714,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"context": {
|
||||
"collection": {
|
||||
"childCollectionIds": [],
|
||||
"id": "collection:WBV2P2001OutlinerCollection",
|
||||
"name": "WBV2P2001OutlinerCollection",
|
||||
"objectIds": [
|
||||
"object:WBV2P2001SelectedObject"
|
||||
]
|
||||
},
|
||||
"scene": {
|
||||
"id": "scene:WBV2P2001Scene",
|
||||
"name": "WBV2P2001Scene",
|
||||
"rootCollectionId": "collection:Scene Collection"
|
||||
},
|
||||
"selection": {
|
||||
"activeObjectId": "object:WBV2P2001SelectedObject",
|
||||
"revision": 1,
|
||||
"selectedObjectIds": [
|
||||
"object:WBV2P2001SelectedObject"
|
||||
]
|
||||
}
|
||||
},
|
||||
"fixtureSha256": "b84250d06f42b32b5c4912cb2411b90dda2167c69681d0e7e861d84352eec78c",
|
||||
"missingData": {
|
||||
"library": null,
|
||||
"pinnedData": null
|
||||
},
|
||||
"operation": "EDITOR_OPEN_SCENE_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-001"
|
||||
}
|
||||
31
tests/golden/WBV2-P2-001/editor-open-scene-report.json
Normal file
31
tests/golden/WBV2-P2-001/editor-open-scene-report.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-001",
|
||||
"operation": "EDITOR_OPEN_SCENE_LOCAL_EXACT",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P2-001-EDITOR.OPEN_SCENE.blend",
|
||||
"sha256": "b84250d06f42b32b5c4912cb2411b90dda2167c69681d0e7e861d84352eec78c"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P2-001/editor-open-scene-desktop-report.json",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"workflowStatus": "AVAILABLE",
|
||||
"sceneId": "scene:WBV2P2001Scene",
|
||||
"rootCollectionId": "collection:WBV2P2001OutlinerCollection",
|
||||
"activeObjectId": "object:WBV2P2001SelectedObject",
|
||||
"selectionRevision": 1,
|
||||
"missingData": {
|
||||
"pinnedData": null,
|
||||
"library": null
|
||||
}
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"negative": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
|
||||
},
|
||||
"nextTask": "WBV2-P2-002"
|
||||
}
|
||||
33
tests/golden/WBV2-P2-001/manifest.json
Normal file
33
tests/golden/WBV2-P2-001/manifest.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-001",
|
||||
"parentTask": "WBV2-P1-005",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "EDITOR_OPEN_SCENE_LOCAL_EXACT",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P1-005/manifest.json", "sha256": "cb22c9c218ffcac0fd45527817eb864dbaf8f677e9b18775275f2f0fc8aa302d"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P2-001-EDITOR.OPEN_SCENE.blend", "sha256": "b84250d06f42b32b5c4912cb2411b90dda2167c69681d0e7e861d84352eec78c"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P2-001.py", "sha256": "747c9d734e90673dc7d6b3e01411bfc9443ffda9c22dc61d55c46207740c0df6"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p2-001-desktop.py", "sha256": "17db8ed9655ccdf1bfe0283cba2eae501abfb9cdbccdf5bd7ed665a52ee819d2"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "057753285f557b170cfda69dd0c116854b2042c9163948f2f33eddfb639d4904"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "754300d1fc9cdfffb4286e36054c0ab724c8bad067761e4b7c2718ed236b23e9"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "4df07c381505d7c06050f568c13905d053e7b02294bd210ac162a2dd32e3074b"},
|
||||
"report": {"path": "tests/golden/WBV2-P2-001/editor-open-scene-report.json", "sha256": "f602facfecca629e95f0231ff0e4de4a25b2e7a1b2a7f7103288f8e285be6c6d"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P2-001/editor-open-scene-desktop-report.json", "sha256": "644db9afdd919c938ca1067946e242d516d3aba90aa5a2f32d9754730df8a874"},
|
||||
"status": {"path": "docs/status/WBV2-P2-001.md", "sha256": "29acd859aeb6d173ce4bbdff9fd103b699a0b6ff486c12b7ebecc123b7a1d82e"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P2-001/task-context.json", "sha256": "c2294208826024535cd505938658535352c6f1b8b8938e5bcd2ad90dbe2fe538"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P2-001/command.log", "sha256": "1ff373478efc0559ff869c17e13087856d4fb88609d715193f77dce819b292bd"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"missingData": "STRUCTURED_NULL_FIELDS",
|
||||
"selectionRevision": "MATCHED_DESKTOP",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"nextTask": "WBV2-P2-002"
|
||||
}
|
||||
180
tests/golden/WBV2-P2-001/task-context.json
Normal file
180
tests/golden/WBV2-P2-001/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-001",
|
||||
"parentTask": "WBV2-P1-005",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable EDITOR.OPEN_SCENE data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "EDITOR.OPEN_SCENE",
|
||||
"ownerFamily": "EDITOR",
|
||||
"implementationClass": "LOCAL_EXACT"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P2-001.py -- tests/files/web/generated/WBV2-P2-001-EDITOR.OPEN_SCENE.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P2-001",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P2-001"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 1140,
|
||||
"contextRemainingTokens": 283
|
||||
},
|
||||
"source": {
|
||||
"bytes": 8764,
|
||||
"tokens": 2193
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P2-001-EDITOR.OPEN_SCENE.blend",
|
||||
"bytes": 86465,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P2-001.py",
|
||||
"bytes": 1177,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 255189,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 881727,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-001/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P2-001.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-001/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"stable IDs and selection revision match",
|
||||
"missing data is structured",
|
||||
"reopen preserves context"
|
||||
],
|
||||
"nextTask": "WBV2-P2-002",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P2-001.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P1-005/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P1-005.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P2-001.md",
|
||||
"tests/golden/WBV2-P1-005/manifest.json",
|
||||
"docs/status/WBV2-P1-005.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1-005",
|
||||
"parentTask": "WBV2-P1-004",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P2-001",
|
||||
"artifactCount": 15
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P1-005 Status",
|
||||
"status: done",
|
||||
"task: WBV2-P1-005",
|
||||
"gate: G1",
|
||||
"updated: 2026-08-25 America/New_York",
|
||||
"The storage journal fixture exposes a bounded OPFS/IndexedDB recovery",
|
||||
"contract through the Blender Text datablock and WASM SceneIR reader. Desktop",
|
||||
"and WASM agree that an interrupted commit keeps the old revision usable, a"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1701,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 426
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P2-001.md",
|
||||
"bytes": 1701,
|
||||
"lines": 38,
|
||||
"tokens": 426
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1-005/manifest.json",
|
||||
"bytes": 2861,
|
||||
"lines": 36,
|
||||
"tokens": 716
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1-005.md",
|
||||
"bytes": 1403,
|
||||
"lines": 33,
|
||||
"tokens": 351
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2193,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2193,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3217,
|
||||
"serializedContextTokens": 685,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
37
tests/golden/WBV2-P2-002/manifest.json
Normal file
37
tests/golden/WBV2-P2-002/manifest.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-002",
|
||||
"parentTask": "WBV2-P2-001",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "OBJECT_TRANSFORM_HIERARCHY_LOCAL_EXACT",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P2-001/manifest.json", "sha256": "ad6d73ac457d20f95fd080fcdacc38049d2ce9faa8c56f325f9f7f22074d1cb5"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P2-002-OBJECT.TRANSFORM_HIERARCHY.blend", "sha256": "62c70feb65822a58c38024d604d4cf93809372c3b7e79493f7829c4039ae01e6"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P2-002.py", "sha256": "17f6a47ab91b92a8128829b011a3341ba7f9cb67192cb7bc81c1a09f72227d65"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p2-002-desktop.py", "sha256": "d1568d92ccfda05d7b580ab1c8e4a709e617cb65f78bcb995df7da88373c14c5"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"productionApi": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", "sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"},
|
||||
"productionMainState": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "3c31a049714860cc89c5b28ebad887a1978df11f8c528c3dfd7836635ed62fb3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ed85b49db9539efe2080d47365274e7731175b18e8e02812980fb86c792203cf"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "9eb8feba27f073b79a03f3285a8ffb45aa1c89008931656e4b195d9da21f7002"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c"},
|
||||
"report": {"path": "tests/golden/WBV2-P2-002/object-transform-report.json", "sha256": "17ede4ecd88d750dfb88e4ef3ab8467d55eb3be221e0d0f58b47bf20b80e646f"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P2-002/object-transform-desktop-report.json", "sha256": "045543872dd311216d21d57b6f33285234e444c9c77532c7d53f66708d7293fc"},
|
||||
"status": {"path": "docs/status/WBV2-P2-002.md", "sha256": "380a34433691aea47a6e34a7deb1c506dfde8dac2d1773d1e4b11579fc08b7a3"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P2-002/task-context.json", "sha256": "e72ab724eb1f096ec1927091fac80c121343ea8a3e0a675f33032f84d47840be"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P2-002/command.log", "sha256": "790054e07e23af09908cb2d2518cbe8607c503d6f4384a166cc25b5276b1445d"},
|
||||
"wasmBuildLog": {"path": "tests/golden/WBV2-P2-002/wasm-build.log", "sha256": "a74e9b6691395cb4fea394bf711716774a5fc9349196706f8701c5ba285bf95e"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"parentCycle": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"lockedOrLibraryTarget": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"saveReopen": "EXACT",
|
||||
"undoRedo": "EXACT"
|
||||
},
|
||||
"nextTask": "WBV2-P2-003"
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"fixtureSha256": "62c70feb65822a58c38024d604d4cf93809372c3b7e79493f7829c4039ae01e6",
|
||||
"operation": "OBJECT_TRANSFORM_HIERARCHY_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"scene": {
|
||||
"collections": {
|
||||
"source": {
|
||||
"id": "collection:WBV2P2002Source",
|
||||
"objectIds": [
|
||||
"object:WBV2P2002Parent",
|
||||
"object:WBV2P2002Child"
|
||||
]
|
||||
},
|
||||
"target": {
|
||||
"id": "collection:WBV2P2002Target",
|
||||
"objectIds": []
|
||||
}
|
||||
},
|
||||
"objects": {
|
||||
"child": {
|
||||
"dataId": "mesh:WBV2P2002ChildMesh",
|
||||
"id": "object:WBV2P2002Child",
|
||||
"parentId": "object:WBV2P2002Parent",
|
||||
"rotationEuler": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"scale": [
|
||||
1.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"translation": [
|
||||
0.0,
|
||||
2.0,
|
||||
0.0
|
||||
],
|
||||
"worldTranslation": [
|
||||
1.0,
|
||||
2.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"dataId": "mesh:WBV2P2002ParentMesh",
|
||||
"id": "object:WBV2P2002Parent",
|
||||
"parentId": null,
|
||||
"rotationEuler": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"scale": [
|
||||
1.0,
|
||||
1.0,
|
||||
1.0
|
||||
],
|
||||
"translation": [
|
||||
1.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"worldTranslation": [
|
||||
1.0,
|
||||
0.0,
|
||||
0.0
|
||||
]
|
||||
}
|
||||
},
|
||||
"scene": {
|
||||
"id": "scene:WBV2P2002Scene",
|
||||
"name": "WBV2P2002Scene"
|
||||
},
|
||||
"selection": {
|
||||
"activeObjectId": "object:WBV2P2002Parent",
|
||||
"revision": 1,
|
||||
"selectedObjectIds": [
|
||||
"object:WBV2P2002Parent"
|
||||
]
|
||||
}
|
||||
},
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-002"
|
||||
}
|
||||
40
tests/golden/WBV2-P2-002/object-transform-report.json
Normal file
40
tests/golden/WBV2-P2-002/object-transform-report.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-002",
|
||||
"operation": "OBJECT_TRANSFORM_HIERARCHY_LOCAL_EXACT",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P2-002-OBJECT.TRANSFORM_HIERARCHY.blend",
|
||||
"sha256": "62c70feb65822a58c38024d604d4cf93809372c3b7e79493f7829c4039ae01e6"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P2-002/object-transform-desktop-report.json",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"parentId": "object:WBV2P2002Parent",
|
||||
"childId": "object:WBV2P2002Child",
|
||||
"transformedChildWorldTranslation": [
|
||||
2,
|
||||
2,
|
||||
0
|
||||
],
|
||||
"targetCollectionId": "collection:WBV2P2002Target",
|
||||
"finalRevision": 6
|
||||
},
|
||||
"transactions": {
|
||||
"transform": "COMMITTED",
|
||||
"parentCycle": "REJECTED",
|
||||
"lockedOrLibraryTarget": "REJECTED",
|
||||
"moveCollection": "COMMITTED",
|
||||
"unparent": "COMMITTED",
|
||||
"undo": "EXACT",
|
||||
"redo": "EXACT"
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"negative": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
|
||||
},
|
||||
"nextTask": "WBV2-P2-003"
|
||||
}
|
||||
183
tests/golden/WBV2-P2-002/task-context.json
Normal file
183
tests/golden/WBV2-P2-002/task-context.json
Normal file
@@ -0,0 +1,183 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-002",
|
||||
"parentTask": "WBV2-P2-001",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable OBJECT.TRANSFORM_HIERARCHY data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "OBJECT.TRANSFORM_HIERARCHY",
|
||||
"ownerFamily": "EDITOR",
|
||||
"implementationClass": "LOCAL_EXACT"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P2-002.py -- tests/files/web/generated/WBV2-P2-002-OBJECT.TRANSFORM_HIERARCHY.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P2-002",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P2-002"
|
||||
],
|
||||
"inputPaths": [
|
||||
"tools/web/generated/WBV2-P2-002.py"
|
||||
],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 1701,
|
||||
"contextRemainingTokens": 423
|
||||
},
|
||||
"source": {
|
||||
"bytes": 8203,
|
||||
"tokens": 2053
|
||||
},
|
||||
"selected": [
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P2-002.py",
|
||||
"bytes": 1358,
|
||||
"tokens": 340
|
||||
}
|
||||
],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P2-002-OBJECT.TRANSFORM_HIERARCHY.blend",
|
||||
"bytes": 86822,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 255189,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 888939,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-002/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P2-002.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-002/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 1,
|
||||
"bytes": 1358,
|
||||
"tokens": 340
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"world matrix parity",
|
||||
"cycle/locked/library edits reject",
|
||||
"undo/redo/save/reopen stable"
|
||||
],
|
||||
"nextTask": "WBV2-P2-003",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P2-002.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P2-001/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P2-001.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P2-002.md",
|
||||
"tests/golden/WBV2-P2-001/manifest.json",
|
||||
"docs/status/WBV2-P2-001.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-001",
|
||||
"parentTask": "WBV2-P1-005",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P2-002",
|
||||
"artifactCount": 14
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P2-001 status",
|
||||
"- task: `WBV2-P2-001`",
|
||||
"- parent: `WBV2-P1-005`",
|
||||
"- parity: `EDITOR.OPEN_SCENE`",
|
||||
"- implementationClass: `LOCAL_EXACT`",
|
||||
"- status: `done`",
|
||||
"- fixture: `tests/files/web/generated/WBV2-P2-001-EDITOR.OPEN_SCENE.blend`",
|
||||
"## Evidence"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1746,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 437
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P2-002.md",
|
||||
"bytes": 1746,
|
||||
"lines": 38,
|
||||
"tokens": 437
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-001/manifest.json",
|
||||
"bytes": 2645,
|
||||
"lines": 34,
|
||||
"tokens": 662
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P2-001.md",
|
||||
"bytes": 1013,
|
||||
"lines": 28,
|
||||
"tokens": 254
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2053,
|
||||
"evidenceFiles": 1,
|
||||
"evidenceBytes": 1358,
|
||||
"evidenceTokens": 340,
|
||||
"totalTokens": 2393,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3417,
|
||||
"serializedContextTokens": 724,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
36
tests/golden/WBV2-P2-003/manifest.json
Normal file
36
tests/golden/WBV2-P2-003/manifest.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-003",
|
||||
"parentTask": "WBV2-P2-002",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "MESH_EDIT_CORE_LOCAL_EXACT",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P2-002/manifest.json", "sha256": "fa65312256f556ce80609206e266f7fc3ccbeda34eae3da179040f8e80dd017c"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P2-003-MESH.EDIT_CORE.blend", "sha256": "1a9a894c4106d73a4533485d9fdddfe2883f75e4692b8e53dc174308e12fe60b"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P2-003.py", "sha256": "65d90913dfd63b345c5efc7851bf312330b0a37ed31c4fdb928ba36fb25e77b6"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p2-003-desktop.py", "sha256": "640048eb905b3849669f6b74bb19ca126851c8cbd4e525c9b7d00d70fe40e3e6"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"productionApi": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", "sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"},
|
||||
"productionMainState": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "3c31a049714860cc89c5b28ebad887a1978df11f8c528c3dfd7836635ed62fb3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "29582f7109c8e2b8584e85d7cd15dc2f91ce4f276a580eccae249ae8d4a2095f"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "4f38de9f1502b6676cfba72942af965aa040708c40345e36854d3240f8c82729"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c"},
|
||||
"report": {"path": "tests/golden/WBV2-P2-003/mesh-edit-report.json", "sha256": "f8bd2ced2e1345248d4b536ef045bb9446a55ca5ae87d834f38904b86521b11d"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P2-003/mesh-edit-desktop-report.json", "sha256": "de03b2c0f35e8d437d164b8d010438c1fbc004f933f8a13470874f02247b74c8"},
|
||||
"status": {"path": "docs/status/WBV2-P2-003.md", "sha256": "b861926c45ab96465e419fccabbcd01d887359d5493e477e12c1d23a1ee1c645"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P2-003/task-context.json", "sha256": "41ab5af171f582c766a47e1dd39c748b6a0709333b45264843ba8cf75216b890"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P2-003/command.log", "sha256": "fec55388964c4f0c2288b35a5046a73779eb918d96225909b9070614c07eb3c1"},
|
||||
"wasmBuildLog": {"path": "tests/golden/WBV2-P2-003/wasm-build.log", "sha256": "90e0120b3f5a5806c188408c5c5a0b3c4b5adade16d66a99640b9ed011ee22c5"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"invalidOperation": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"invalidSelection": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"nextTask": "WBV2-P2-004"
|
||||
}
|
||||
73
tests/golden/WBV2-P2-003/mesh-edit-desktop-report.json
Normal file
73
tests/golden/WBV2-P2-003/mesh-edit-desktop-report.json
Normal file
@@ -0,0 +1,73 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"fixtureSha256": "1a9a894c4106d73a4533485d9fdddfe2883f75e4692b8e53dc174308e12fe60b",
|
||||
"meshes": {
|
||||
"Bevel": {
|
||||
"edgeCount": 4,
|
||||
"faceCount": 1,
|
||||
"meshId": "mesh:WBV2P2003BevelMesh",
|
||||
"objectId": "object:WBV2P2003BevelObject",
|
||||
"positionHash": "6950892ba966c4c44e1aef91ab52d8dfede9a33a1d33f4a5d139bc543d3158c5",
|
||||
"triangleCount": 2,
|
||||
"vertexCount": 4
|
||||
},
|
||||
"Dissolve": {
|
||||
"edgeCount": 4,
|
||||
"faceCount": 1,
|
||||
"meshId": "mesh:WBV2P2003DissolveMesh",
|
||||
"objectId": "object:WBV2P2003DissolveObject",
|
||||
"positionHash": "6950892ba966c4c44e1aef91ab52d8dfede9a33a1d33f4a5d139bc543d3158c5",
|
||||
"triangleCount": 2,
|
||||
"vertexCount": 4
|
||||
},
|
||||
"Extrude": {
|
||||
"edgeCount": 4,
|
||||
"faceCount": 1,
|
||||
"meshId": "mesh:WBV2P2003ExtrudeMesh",
|
||||
"objectId": "object:WBV2P2003ExtrudeObject",
|
||||
"positionHash": "6950892ba966c4c44e1aef91ab52d8dfede9a33a1d33f4a5d139bc543d3158c5",
|
||||
"triangleCount": 2,
|
||||
"vertexCount": 4
|
||||
},
|
||||
"Inset": {
|
||||
"edgeCount": 4,
|
||||
"faceCount": 1,
|
||||
"meshId": "mesh:WBV2P2003InsetMesh",
|
||||
"objectId": "object:WBV2P2003InsetObject",
|
||||
"positionHash": "6950892ba966c4c44e1aef91ab52d8dfede9a33a1d33f4a5d139bc543d3158c5",
|
||||
"triangleCount": 2,
|
||||
"vertexCount": 4
|
||||
},
|
||||
"LoopCut": {
|
||||
"edgeCount": 4,
|
||||
"faceCount": 1,
|
||||
"meshId": "mesh:WBV2P2003LoopCutMesh",
|
||||
"objectId": "object:WBV2P2003LoopCutObject",
|
||||
"positionHash": "6950892ba966c4c44e1aef91ab52d8dfede9a33a1d33f4a5d139bc543d3158c5",
|
||||
"triangleCount": 2,
|
||||
"vertexCount": 4
|
||||
},
|
||||
"Merge": {
|
||||
"edgeCount": 4,
|
||||
"faceCount": 1,
|
||||
"meshId": "mesh:WBV2P2003MergeMesh",
|
||||
"objectId": "object:WBV2P2003MergeObject",
|
||||
"positionHash": "6950892ba966c4c44e1aef91ab52d8dfede9a33a1d33f4a5d139bc543d3158c5",
|
||||
"triangleCount": 2,
|
||||
"vertexCount": 4
|
||||
},
|
||||
"Translate": {
|
||||
"edgeCount": 4,
|
||||
"faceCount": 1,
|
||||
"meshId": "mesh:WBV2P2003TranslateMesh",
|
||||
"objectId": "object:WBV2P2003TranslateObject",
|
||||
"positionHash": "6950892ba966c4c44e1aef91ab52d8dfede9a33a1d33f4a5d139bc543d3158c5",
|
||||
"triangleCount": 2,
|
||||
"vertexCount": 4
|
||||
}
|
||||
},
|
||||
"operation": "MESH_EDIT_CORE_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-003"
|
||||
}
|
||||
84
tests/golden/WBV2-P2-003/mesh-edit-report.json
Normal file
84
tests/golden/WBV2-P2-003/mesh-edit-report.json
Normal file
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-003",
|
||||
"operation": "MESH_EDIT_CORE_LOCAL_EXACT",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P2-003-MESH.EDIT_CORE.blend",
|
||||
"sha256": "1a9a894c4106d73a4533485d9fdddfe2883f75e4692b8e53dc174308e12fe60b"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P2-003/mesh-edit-desktop-report.json",
|
||||
"saveReopen": "EXACT",
|
||||
"initialTopology": "quad"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"operations": {
|
||||
"Translate": {
|
||||
"meshId": "mesh:WBV2P2003TranslateMesh",
|
||||
"revision": 2,
|
||||
"vertexCount": 4,
|
||||
"edgeCount": 4,
|
||||
"faceCount": 1,
|
||||
"triangleCount": 2
|
||||
},
|
||||
"Merge": {
|
||||
"meshId": "mesh:WBV2P2003MergeMesh",
|
||||
"revision": 3,
|
||||
"vertexCount": 3,
|
||||
"edgeCount": 3,
|
||||
"faceCount": 1,
|
||||
"triangleCount": 1
|
||||
},
|
||||
"Dissolve": {
|
||||
"meshId": "mesh:WBV2P2003DissolveMesh",
|
||||
"revision": 4,
|
||||
"vertexCount": 4,
|
||||
"edgeCount": 4,
|
||||
"faceCount": 1,
|
||||
"triangleCount": 2
|
||||
},
|
||||
"Extrude": {
|
||||
"meshId": "mesh:WBV2P2003ExtrudeMesh",
|
||||
"revision": 5,
|
||||
"vertexCount": 8,
|
||||
"edgeCount": 12,
|
||||
"faceCount": 6,
|
||||
"triangleCount": 12
|
||||
},
|
||||
"Inset": {
|
||||
"meshId": "mesh:WBV2P2003InsetMesh",
|
||||
"revision": 6,
|
||||
"vertexCount": 8,
|
||||
"edgeCount": 12,
|
||||
"faceCount": 5,
|
||||
"triangleCount": 10
|
||||
},
|
||||
"Bevel": {
|
||||
"meshId": "mesh:WBV2P2003BevelMesh",
|
||||
"revision": 7,
|
||||
"vertexCount": 4,
|
||||
"edgeCount": 4,
|
||||
"faceCount": 1,
|
||||
"triangleCount": 2
|
||||
},
|
||||
"LoopCut": {
|
||||
"meshId": "mesh:WBV2P2003LoopCutMesh",
|
||||
"revision": 8,
|
||||
"vertexCount": 5,
|
||||
"edgeCount": 5,
|
||||
"faceCount": 1,
|
||||
"triangleCount": 3
|
||||
}
|
||||
},
|
||||
"finalRevision": 8
|
||||
},
|
||||
"negative": {
|
||||
"invalidOperation": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"invalidSelection": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"nextTask": "WBV2-P2-004"
|
||||
}
|
||||
180
tests/golden/WBV2-P2-003/task-context.json
Normal file
180
tests/golden/WBV2-P2-003/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-003",
|
||||
"parentTask": "WBV2-P2-002",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable MESH.EDIT_CORE data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "MESH.EDIT_CORE",
|
||||
"ownerFamily": "MESH",
|
||||
"implementationClass": "LOCAL_EXACT"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P2-003.py -- tests/files/web/generated/WBV2-P2-003-MESH.EDIT_CORE.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P2-003",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P2-003"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 825,
|
||||
"contextRemainingTokens": 205
|
||||
},
|
||||
"source": {
|
||||
"bytes": 9079,
|
||||
"tokens": 2271
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P2-003-MESH.EDIT_CORE.blend",
|
||||
"bytes": 88023,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P2-003.py",
|
||||
"bytes": 1161,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 255189,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 895739,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-003/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P2-003.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-003/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"topology/attributes match",
|
||||
"invalid selection and budget fail closed",
|
||||
"single transaction and reopen stable"
|
||||
],
|
||||
"nextTask": "WBV2-P2-004",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P2-003.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P2-002/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P2-002.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P2-003.md",
|
||||
"tests/golden/WBV2-P2-002/manifest.json",
|
||||
"docs/status/WBV2-P2-002.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-002",
|
||||
"parentTask": "WBV2-P2-001",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P2-003",
|
||||
"artifactCount": 17
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P2-002 status",
|
||||
"- task: `WBV2-P2-002`",
|
||||
"- parent: `WBV2-P2-001`",
|
||||
"- parity: `OBJECT.TRANSFORM_HIERARCHY`",
|
||||
"- implementationClass: `LOCAL_EXACT`",
|
||||
"- status: `done`",
|
||||
"- fixture: `tests/files/web/generated/WBV2-P2-002-OBJECT.TRANSFORM_HIERARCHY.blend`",
|
||||
"## Evidence"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1684,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 421
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P2-003.md",
|
||||
"bytes": 1684,
|
||||
"lines": 38,
|
||||
"tokens": 421
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-002/manifest.json",
|
||||
"bytes": 3223,
|
||||
"lines": 38,
|
||||
"tokens": 806
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P2-002.md",
|
||||
"bytes": 1373,
|
||||
"lines": 33,
|
||||
"tokens": 344
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2271,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2271,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3295,
|
||||
"serializedContextTokens": 685,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
39
tests/golden/WBV2-P2-004/manifest.json
Normal file
39
tests/golden/WBV2-P2-004/manifest.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-004",
|
||||
"parentTask": "WBV2-P2-003",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN_AND_PLAYWRIGHT_CHROMIUM",
|
||||
"operation": "VIEWPORT_MAIN_OFFSCREEN_LOCAL_BOUNDED",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P2-003/manifest.json", "sha256": "79ebc20719fef2b60a3457bca25dac98e755a2f2c1bd3c35361527509a91a987"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P2-004-VIEWPORT.MAIN_OFFSCREEN.blend", "sha256": "69cb86102cad7f6a8e747ed29b3456761ba4a1de7f33e7c0d6dc7d3b5dbd2e17"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P2-004.py", "sha256": "fad8f75b84b5c4c1757645e94d81af265aba8f911d2ffd1c05abcffc24b24a51"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p2-004-desktop.py", "sha256": "cd936e328b79a83db910099a20136bac694c446509d8618cd199d6f8c7d34625"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "29582f7109c8e2b8584e85d7cd15dc2f91ce4f276a580eccae249ae8d4a2095f"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "4f38de9f1502b6676cfba72942af965aa040708c40345e36854d3240f8c82729"},
|
||||
"offscreenProtocol": {"path": "web/app/src/three-adapter/offscreen-viewport-protocol.ts", "sha256": "d79367b6361036a4d5b8cf0d12d9ffce783e3e2b6d686b5b5b152aa40ac9ae2e"},
|
||||
"offscreenViewport": {"path": "web/app/src/three-adapter/offscreen-viewport.ts", "sha256": "1d7d18146d34245e07392022a703ff16f6432093fb88e788927e1347556ffd71"},
|
||||
"offscreenWorker": {"path": "web/app/src/workers/viewport-render.worker.ts", "sha256": "9643724d2530a0af434613d4734f66fb18620a11e9f487d4d9d9e6312374c14b"},
|
||||
"mainViewport": {"path": "web/app/src/three-adapter/viewport.ts", "sha256": "e8d97cb59fd4eca3789aeeb35221a70cf47ef048a5665383d809d0efc49f7119"},
|
||||
"package": {"path": "web/package.json", "sha256": "40b7f14d4f568ae94bedde83e02115c127e0c714e5eb32a6a97b1e1084c4fa68"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c"},
|
||||
"report": {"path": "tests/golden/WBV2-P2-004/viewport-report.json", "sha256": "a38e7ff8da3042a82f4d20f9f6c60300ebd6ee393cf3625901c770ebff674dac"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P2-004/viewport-desktop-report.json", "sha256": "24383a87477efe6d72f457819260143d0b5f1a5b5c918a8e39279a13a3bfdc0c"},
|
||||
"status": {"path": "docs/status/WBV2-P2-004.md", "sha256": "56194bd7e40632398823467ab5cc1fd9b633f4605086bd40acc3865a94cfb268"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P2-004/task-context.json", "sha256": "7071c819b734d543cda60f3ac833d6b004befc1f3484c1396ebd9c96afd7c679"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P2-004/command.log", "sha256": "a2f494634f16d33ed5d341d241b190a4dd34c9b0ba39f0834afc1f48f7c67867"},
|
||||
"browserBuildLog": {"path": "tests/golden/WBV2-P2-004/browser-build.log", "sha256": "60187c83b43444ff22d02e505e74a94dc3c4b058d4c4f280ae67701089ab67af"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"mainDeviceLoss": "RECOVERED_WITH_NONBLANK_READBACK",
|
||||
"offscreenDisposeReopen": "EXACT",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"nextTask": "WBV2-P2-005"
|
||||
}
|
||||
180
tests/golden/WBV2-P2-004/task-context.json
Normal file
180
tests/golden/WBV2-P2-004/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-004",
|
||||
"parentTask": "WBV2-P2-003",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable VIEWPORT.MAIN_OFFSCREEN data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "VIEWPORT.MAIN_OFFSCREEN",
|
||||
"ownerFamily": "VIEWPORT",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P2-004.py -- tests/files/web/generated/WBV2-P2-004-VIEWPORT.MAIN_OFFSCREEN.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P2-004",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P2-004"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 1171,
|
||||
"contextRemainingTokens": 292
|
||||
},
|
||||
"source": {
|
||||
"bytes": 8733,
|
||||
"tokens": 2184
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P2-004-VIEWPORT.MAIN_OFFSCREEN.blend",
|
||||
"bytes": 87800,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P2-004.py",
|
||||
"bytes": 1325,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 255189,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 906837,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-004/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P2-004.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-004/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"both paths have nonblank pixels",
|
||||
"selection/camera revision is shared",
|
||||
"device loss releases resources"
|
||||
],
|
||||
"nextTask": "WBV2-P2-005",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P2-004.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P2-003/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P2-003.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P2-004.md",
|
||||
"tests/golden/WBV2-P2-003/manifest.json",
|
||||
"docs/status/WBV2-P2-003.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-003",
|
||||
"parentTask": "WBV2-P2-002",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P2-004",
|
||||
"artifactCount": 17
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P2-003 status",
|
||||
"- task: `WBV2-P2-003`",
|
||||
"- parent: `WBV2-P2-002`",
|
||||
"- parity: `MESH.EDIT_CORE`",
|
||||
"- implementationClass: `LOCAL_EXACT`",
|
||||
"- status: `done`",
|
||||
"- fixture: `tests/files/web/generated/WBV2-P2-003-MESH.EDIT_CORE.blend`",
|
||||
"## Evidence"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1735,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 434
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P2-004.md",
|
||||
"bytes": 1735,
|
||||
"lines": 38,
|
||||
"tokens": 434
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-003/manifest.json",
|
||||
"bytes": 3160,
|
||||
"lines": 37,
|
||||
"tokens": 790
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P2-003.md",
|
||||
"bytes": 1039,
|
||||
"lines": 27,
|
||||
"tokens": 260
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2184,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2184,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3208,
|
||||
"serializedContextTokens": 692,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
28
tests/golden/WBV2-P2-004/viewport-desktop-report.json
Normal file
28
tests/golden/WBV2-P2-004/viewport-desktop-report.json
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"fixtureSha256": "69cb86102cad7f6a8e747ed29b3456761ba4a1de7f33e7c0d6dc7d3b5dbd2e17",
|
||||
"operation": "VIEWPORT_MAIN_OFFSCREEN_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"scene": {
|
||||
"cameraDataId": "camera:WBV2P2004ViewportCamera",
|
||||
"cameraId": "object:WBV2P2004ViewportCamera",
|
||||
"cameraLensMm": 52.0,
|
||||
"cameraLocation": [
|
||||
6.5,
|
||||
-6.5,
|
||||
4.75
|
||||
],
|
||||
"cubeId": "object:WBV2P2004ViewportCube",
|
||||
"cubeLocation": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"faceCount": 6,
|
||||
"meshId": "mesh:WBV2P2004ViewportCubeMesh",
|
||||
"sceneId": "scene:WBV2P2004ViewportScene",
|
||||
"vertexCount": 8
|
||||
},
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-004"
|
||||
}
|
||||
97
tests/golden/WBV2-P2-004/viewport-report.json
Normal file
97
tests/golden/WBV2-P2-004/viewport-report.json
Normal file
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-004",
|
||||
"operation": "VIEWPORT_MAIN_OFFSCREEN_LOCAL_BOUNDED",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P2-004-VIEWPORT.MAIN_OFFSCREEN.blend",
|
||||
"sha256": "69cb86102cad7f6a8e747ed29b3456761ba4a1de7f33e7c0d6dc7d3b5dbd2e17"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P2-004/viewport-desktop-report.json",
|
||||
"scene": {
|
||||
"cameraDataId": "camera:WBV2P2004ViewportCamera",
|
||||
"cameraId": "object:WBV2P2004ViewportCamera",
|
||||
"cameraLensMm": 52,
|
||||
"cameraLocation": [
|
||||
6.5,
|
||||
-6.5,
|
||||
4.75
|
||||
],
|
||||
"cubeId": "object:WBV2P2004ViewportCube",
|
||||
"cubeLocation": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"faceCount": 6,
|
||||
"meshId": "mesh:WBV2P2004ViewportCubeMesh",
|
||||
"sceneId": "scene:WBV2P2004ViewportScene",
|
||||
"vertexCount": 8
|
||||
},
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"revision": 1,
|
||||
"objectId": "object:WBV2P2004ViewportCube",
|
||||
"cameraObjectId": "object:WBV2P2004ViewportCamera",
|
||||
"cameraDataId": "camera:WBV2P2004ViewportCamera",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"browser": {
|
||||
"runtime": "PLAYWRIGHT_CHROMIUM",
|
||||
"main": {
|
||||
"backend": "webgl-pbr",
|
||||
"deviceStatus": "ready",
|
||||
"rendererPixels": 0,
|
||||
"readbackPixels": 256,
|
||||
"selected": "object:WBV2P2004ViewportCube",
|
||||
"cameraPosition": "4.219781,-4.219781,3.658811",
|
||||
"cameraTarget": "0,0,0",
|
||||
"cameraYaw": "-0.785398",
|
||||
"cameraPitch": "0.550000",
|
||||
"cameraDistance": "7.000000",
|
||||
"viewport": "679x321",
|
||||
"error": "",
|
||||
"deviceRecovery": {
|
||||
"supported": true,
|
||||
"status": "ready",
|
||||
"pixels": 1024
|
||||
},
|
||||
"dispose": "EXACT"
|
||||
},
|
||||
"offscreen": {
|
||||
"backend": "offscreen-worker",
|
||||
"deviceStatus": "ready",
|
||||
"rendererPixels": 61,
|
||||
"readbackPixels": 0,
|
||||
"selected": "object:WBV2P2004ViewportCube",
|
||||
"cameraPosition": "4.219781,-4.219781,3.658811",
|
||||
"cameraTarget": "0,0,0",
|
||||
"cameraYaw": "-0.785398",
|
||||
"cameraPitch": "0.550000",
|
||||
"cameraDistance": "7.000000",
|
||||
"viewport": "679x321",
|
||||
"error": "",
|
||||
"deviceRecovery": {
|
||||
"supported": false,
|
||||
"status": "ready",
|
||||
"pixels": 61
|
||||
},
|
||||
"dispose": "EXACT"
|
||||
},
|
||||
"sharedSelection": "object:WBV2P2004ViewportCube",
|
||||
"sharedCamera": {
|
||||
"position": "4.219781,-4.219781,3.658811",
|
||||
"target": "0,0,0",
|
||||
"yaw": "-0.785398",
|
||||
"pitch": "0.550000",
|
||||
"distance": "7.000000"
|
||||
}
|
||||
},
|
||||
"negative": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
|
||||
},
|
||||
"nextTask": "WBV2-P2-005"
|
||||
}
|
||||
38
tests/golden/WBV2-P2-005/manifest.json
Normal file
38
tests/golden/WBV2-P2-005/manifest.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-005",
|
||||
"parentTask": "WBV2-P2-004",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN_AND_PLAYWRIGHT_CHROMIUM",
|
||||
"operation": "WORKFLOW_P0_USER_LOOP_LOCAL_BOUNDED",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P2-004/manifest.json", "sha256": "9a511f9620bdc886ab4684ac449dcaa156086cde76c0b95d16795f0f51a304f2"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P2-005-WORKFLOW.P0_USER_LOOP.blend", "sha256": "51788408d7b1a273583872b749eec36191db441d431b2d4ddcfffecddb256999"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P2-005.py", "sha256": "96f6788bbe901f98d1bb2b50ec49e6d0418a8ec3c784e95dce54e7a1eab49e19"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p2-005-desktop.py", "sha256": "176359ff0665ec2fc1b62b0ac9a5af96dbc70977c7e5100c99aed5fd22b5e524"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "0f979e0f5f14a5db97d2f7cb24a8c4e13980db64268d4161cc9b520cad1ac4fa"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "e3460ba1f57bab2b17d98faec55dedc16bc4bcea4c23945196285dd7688f8cfd"},
|
||||
"app": {"path": "web/app/src/app/App.tsx", "sha256": "5861988f3dfbb8c05d36aee3033a72514de53a0cb4ec6f3d832418ef6b5cc8b2"},
|
||||
"engineClient": {"path": "web/app/src/engine-client/WebEngineClient.ts", "sha256": "f6d9a8e0a16403bc6fb765195b8f1a619a28de7a75c59a412f1654d46e8ebc0b"},
|
||||
"glbExporter": {"path": "web/protocol/glb-export.ts", "sha256": "a5d342827860a9e55b49a3bb3a196a01b1e53546325d6e594778afb9360c3125"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c"},
|
||||
"report": {"path": "tests/golden/WBV2-P2-005/workflow-report.json", "sha256": "aee794bac23af8acaaabe8ed808fad27a97dc628ed1cadd6224db2573b0a77ec"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P2-005/workflow-desktop-report.json", "sha256": "4a39d9dccfb2fa80992ca6abab2afcfd33052e427e3fd5f602c6bfb96622bdbe"},
|
||||
"status": {"path": "docs/status/WBV2-P2-005.md", "sha256": "f6be0ed47988bf3cab9a562ee36e31057919189fc589e17ced60c313ebf8fcee"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P2-005/task-context.json", "sha256": "9b494efbfa077f3d37b186a42631029e11108cef83a40aae1cab98f41312a276"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P2-005/command.log", "sha256": "a12ee0d21a00299b7d64be7814e479c4ab350e8e799b406af6849527feb2027d"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"cancellation": "RETAINED_PREVIOUS_SCENE_AND_RELEASED_RESOURCES",
|
||||
"workerFault": "RECOVERED_WITH_EDITED_SCENE",
|
||||
"duplicateSave": "SINGLE_COMMITTED_DOWNLOAD",
|
||||
"saveReopen": "EXACT",
|
||||
"glbExport": "VALID_GLTF_BINARY"
|
||||
},
|
||||
"nextTask": "WBV2-P3-001"
|
||||
}
|
||||
180
tests/golden/WBV2-P2-005/task-context.json
Normal file
180
tests/golden/WBV2-P2-005/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-005",
|
||||
"parentTask": "WBV2-P2-004",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable WORKFLOW.P0_USER_LOOP data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "WORKFLOW.P0_USER_LOOP",
|
||||
"ownerFamily": "INTEGRATION",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P2-005.py -- tests/files/web/generated/WBV2-P2-005-WORKFLOW.P0_USER_LOOP.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P2-005",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P2-005"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 564,
|
||||
"contextRemainingTokens": 140
|
||||
},
|
||||
"source": {
|
||||
"bytes": 9340,
|
||||
"tokens": 2336
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P2-005-WORKFLOW.P0_USER_LOOP.blend",
|
||||
"bytes": 87280,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P2-005.py",
|
||||
"bytes": 919,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 255189,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 919367,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-005/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P2-005.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-005/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"Main revision and exported asset are bound",
|
||||
"fault/cancel leaves old state",
|
||||
"Chromium production path passes"
|
||||
],
|
||||
"nextTask": "WBV2-P3-001",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P2-005.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P2-004/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P2-004.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P2-005.md",
|
||||
"tests/golden/WBV2-P2-004/manifest.json",
|
||||
"docs/status/WBV2-P2-004.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-004",
|
||||
"parentTask": "WBV2-P2-003",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P2-005",
|
||||
"artifactCount": 20
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P2-004 status",
|
||||
"- task: `WBV2-P2-004`",
|
||||
"- parent: `WBV2-P2-003`",
|
||||
"- parity: `VIEWPORT.MAIN_OFFSCREEN`",
|
||||
"- implementationClass: `LOCAL_BOUNDED`",
|
||||
"- status: `done`",
|
||||
"- fixture: `tests/files/web/generated/WBV2-P2-004-VIEWPORT.MAIN_OFFSCREEN.blend`",
|
||||
"## Evidence"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1728,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 432
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P2-005.md",
|
||||
"bytes": 1728,
|
||||
"lines": 38,
|
||||
"tokens": 432
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-004/manifest.json",
|
||||
"bytes": 3599,
|
||||
"lines": 40,
|
||||
"tokens": 900
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P2-004.md",
|
||||
"bytes": 1214,
|
||||
"lines": 28,
|
||||
"tokens": 304
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2336,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2336,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3360,
|
||||
"serializedContextTokens": 693,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
20
tests/golden/WBV2-P2-005/workflow-desktop-report.json
Normal file
20
tests/golden/WBV2-P2-005/workflow-desktop-report.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"fixtureSha256": "51788408d7b1a273583872b749eec36191db441d431b2d4ddcfffecddb256999",
|
||||
"operation": "WORKFLOW_P0_USER_LOOP_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"scene": {
|
||||
"faceCount": 6,
|
||||
"location": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"meshId": "mesh:WBV2P2005WorkflowCubeMesh",
|
||||
"objectId": "object:WBV2P2005WorkflowCube",
|
||||
"sceneId": "scene:WBV2P2005WorkflowScene",
|
||||
"vertexCount": 8
|
||||
},
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-005"
|
||||
}
|
||||
66
tests/golden/WBV2-P2-005/workflow-report.json
Normal file
66
tests/golden/WBV2-P2-005/workflow-report.json
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-005",
|
||||
"operation": "WORKFLOW_P0_USER_LOOP_LOCAL_BOUNDED",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P2-005-WORKFLOW.P0_USER_LOOP.blend",
|
||||
"sha256": "51788408d7b1a273583872b749eec36191db441d431b2d4ddcfffecddb256999"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P2-005/workflow-desktop-report.json",
|
||||
"scene": {
|
||||
"faceCount": 6,
|
||||
"location": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"meshId": "mesh:WBV2P2005WorkflowCubeMesh",
|
||||
"objectId": "object:WBV2P2005WorkflowCube",
|
||||
"sceneId": "scene:WBV2P2005WorkflowScene",
|
||||
"vertexCount": 8
|
||||
},
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"initialRevision": 1,
|
||||
"createdRevision": 2,
|
||||
"transformedRevision": 3,
|
||||
"undoRevision": 4,
|
||||
"redoRevision": 5,
|
||||
"reopenedRevision": 1,
|
||||
"editedObjectId": "object:WBV2P2005EditedCube",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"browser": {
|
||||
"runtime": "PLAYWRIGHT_CHROMIUM",
|
||||
"engineFaultRecovery": "EXACT",
|
||||
"cancellation": "EXACT",
|
||||
"glb": "EXACT",
|
||||
"evidence": {
|
||||
"initialStats": "Objects 1 · Vertices 8 · Faces 6",
|
||||
"editedStats": "Objects 2 · Vertices 16 · Faces 18",
|
||||
"committedRevision": "1",
|
||||
"editedRevision": "2",
|
||||
"recoveryStatus": "SUCCEEDED",
|
||||
"cancellation": {
|
||||
"bytesRead": 4194304,
|
||||
"totalBytes": 41943040,
|
||||
"status": "CANCELLED"
|
||||
},
|
||||
"glb": {
|
||||
"byteLength": 4412,
|
||||
"magic": "glTF",
|
||||
"status": "SUCCEEDED"
|
||||
}
|
||||
}
|
||||
},
|
||||
"negative": {
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"cancellation": "RETAINED_PREVIOUS_SCENE",
|
||||
"duplicateSave": "SINGLE_COMMITTED_DOWNLOAD"
|
||||
},
|
||||
"nextTask": "WBV2-P3-001"
|
||||
}
|
||||
33
tests/golden/WBV2-P3-001/manifest.json
Normal file
33
tests/golden/WBV2-P3-001/manifest.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-001",
|
||||
"parentTask": "WBV2-P2-005",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "MATERIAL_PBR_UV_LOCAL_BOUNDED",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P2-005/manifest.json", "sha256": "284eda53bb4191da68a30b4fcb8e02801cb83299864846f7e52875f4d976b7be"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P3-001-MATERIAL.PBR_UV.blend", "sha256": "cdf3a13e88a2084e9ac46b998a9ad1975c5e20e2bc0f2a68038c62de8801ed22"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P3-001.py", "sha256": "1fa6f39ccb9470e8fe9fc7763b9a96e084b75e75f5a73a88de5f7bf321a317d2"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p3-001-desktop.py", "sha256": "28b11bcb36bd52d5bb2968719bbc22874c46253f5eb62bfe1c6acad7f993dd1e"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b26901f733040884038f38e12bd607da27cd91891776e7b67a774b000180fab6"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "e3460ba1f57bab2b17d98faec55dedc16bc4bcea4c23945196285dd7688f8cfd"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c"},
|
||||
"report": {"path": "tests/golden/WBV2-P3-001/material-report.json", "sha256": "8ab3dd49364a2f6c5404249f1433fc1f2085d9deaf9a6d126732dbd7ca9d262c"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P3-001/material-desktop-report.json", "sha256": "7635ae921b318f82bb8f3b0b1bbfadad4239eae2ef68195f4628f94bc996b6f6"},
|
||||
"status": {"path": "docs/status/WBV2-P3-001.md", "sha256": "f0550ca889d8a3991a966b7a8eefc2e15efd19d326bbc0a697b69d74a777d736"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P3-001/task-context.json", "sha256": "fceb8038a8535494c54363b43d01fe1e2166c3c2d658e3ebec045e292f3f02a9"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P3-001/command.log", "sha256": "f93d4c2526d3b22fd3c017804bb3cb8be57828a4a7943703bf15a570184acdf5"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"unsupportedNode": "RETAINED_AND_BLOCKED_BY_WARNING",
|
||||
"invalidUVMap": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"nextTask": "WBV2-P3-002"
|
||||
}
|
||||
33
tests/golden/WBV2-P3-001/material-desktop-report.json
Normal file
33
tests/golden/WBV2-P3-001/material-desktop-report.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"fixtureSha256": "cdf3a13e88a2084e9ac46b998a9ad1975c5e20e2bc0f2a68038c62de8801ed22",
|
||||
"material": {
|
||||
"activeUVMap": "WBV2P3001UV",
|
||||
"baseColor": [
|
||||
0.12,
|
||||
0.34,
|
||||
0.56,
|
||||
1.0
|
||||
],
|
||||
"ior": 1.42,
|
||||
"materialId": "material:WBV2P3001PrincipledMaterial",
|
||||
"materialName": "WBV2P3001PrincipledMaterial",
|
||||
"metallic": 0.67,
|
||||
"nodeTypes": [
|
||||
"ShaderNodeBsdfPrincipled",
|
||||
"ShaderNodeOutputMaterial",
|
||||
"ShaderNodeTexNoise"
|
||||
],
|
||||
"roughness": 0.23,
|
||||
"unsupportedNode": true,
|
||||
"uvHash": "2d377662171031fd2165274c3717ed3e44260f4b5348ba1e54f24a735f00945e",
|
||||
"uvLayerNames": [
|
||||
"WBV2P3001UV"
|
||||
],
|
||||
"uvValueCount": 48
|
||||
},
|
||||
"operation": "MATERIAL_PBR_UV_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-001"
|
||||
}
|
||||
63
tests/golden/WBV2-P3-001/material-report.json
Normal file
63
tests/golden/WBV2-P3-001/material-report.json
Normal file
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-001",
|
||||
"operation": "MATERIAL_PBR_UV_LOCAL_BOUNDED",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P3-001-MATERIAL.PBR_UV.blend",
|
||||
"sha256": "cdf3a13e88a2084e9ac46b998a9ad1975c5e20e2bc0f2a68038c62de8801ed22"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P3-001/material-desktop-report.json",
|
||||
"material": {
|
||||
"activeUVMap": "WBV2P3001UV",
|
||||
"baseColor": [
|
||||
0.12,
|
||||
0.34,
|
||||
0.56,
|
||||
1
|
||||
],
|
||||
"ior": 1.42,
|
||||
"materialId": "material:WBV2P3001PrincipledMaterial",
|
||||
"materialName": "WBV2P3001PrincipledMaterial",
|
||||
"metallic": 0.67,
|
||||
"nodeTypes": [
|
||||
"ShaderNodeBsdfPrincipled",
|
||||
"ShaderNodeOutputMaterial",
|
||||
"ShaderNodeTexNoise"
|
||||
],
|
||||
"roughness": 0.23,
|
||||
"unsupportedNode": true,
|
||||
"uvHash": "2d377662171031fd2165274c3717ed3e44260f4b5348ba1e54f24a735f00945e",
|
||||
"uvLayerNames": [
|
||||
"WBV2P3001UV"
|
||||
],
|
||||
"uvValueCount": 48
|
||||
},
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"initialRevision": 1,
|
||||
"finalRevision": 5,
|
||||
"materialId": "material:WBV2P3001PrincipledMaterial",
|
||||
"meshId": "mesh:WBV2P3001MaterialCubeMesh",
|
||||
"activeUVMap": "WBV2P3001SecondaryUV",
|
||||
"baseColor": [
|
||||
0.20000000298023224,
|
||||
0.4000000059604645,
|
||||
0.6000000238418579,
|
||||
1
|
||||
],
|
||||
"roughness": 0.3100000023841858,
|
||||
"metallic": 0.7200000286102295,
|
||||
"unsupportedNode": true,
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"negative": {
|
||||
"unsupportedNode": "RETAINED_AND_BLOCKED_BY_WARNING",
|
||||
"invalidUVMap": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
|
||||
},
|
||||
"nextTask": "WBV2-P3-002"
|
||||
}
|
||||
180
tests/golden/WBV2-P3-001/task-context.json
Normal file
180
tests/golden/WBV2-P3-001/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-001",
|
||||
"parentTask": "WBV2-P2-005",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable MATERIAL.PBR_UV data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "MATERIAL.PBR_UV",
|
||||
"ownerFamily": "MATERIAL",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P3-001.py -- tests/files/web/generated/WBV2-P3-001-MATERIAL.PBR_UV.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P3-001",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P3-001"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 995,
|
||||
"contextRemainingTokens": 248
|
||||
},
|
||||
"source": {
|
||||
"bytes": 8909,
|
||||
"tokens": 2228
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P3-001-MATERIAL.PBR_UV.blend",
|
||||
"bytes": 89548,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P3-001.py",
|
||||
"bytes": 1821,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 255189,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 925517,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-001/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P3-001.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-001/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"desktop/WASM node fields match",
|
||||
"unsupported node retained/blocked",
|
||||
"packed asset survives reopen"
|
||||
],
|
||||
"nextTask": "WBV2-P3-002",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P3-001.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P2-005/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P2-005.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P3-001.md",
|
||||
"tests/golden/WBV2-P2-005/manifest.json",
|
||||
"docs/status/WBV2-P2-005.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P2-005",
|
||||
"parentTask": "WBV2-P2-004",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P3-001",
|
||||
"artifactCount": 17
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P2-005 status",
|
||||
"- task: `WBV2-P2-005`",
|
||||
"- parent: `WBV2-P2-004`",
|
||||
"- parity: `WORKFLOW.P0_USER_LOOP`",
|
||||
"- implementationClass: `LOCAL_BOUNDED`",
|
||||
"- status: `done`",
|
||||
"- fixture: `tests/files/web/generated/WBV2-P2-005-WORKFLOW.P0_USER_LOOP.blend`",
|
||||
"## Evidence"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1695,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 424
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P3-001.md",
|
||||
"bytes": 1695,
|
||||
"lines": 38,
|
||||
"tokens": 424
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P2-005/manifest.json",
|
||||
"bytes": 3199,
|
||||
"lines": 39,
|
||||
"tokens": 800
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P2-005.md",
|
||||
"bytes": 1216,
|
||||
"lines": 27,
|
||||
"tokens": 304
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2228,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2228,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3252,
|
||||
"serializedContextTokens": 685,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
186
tests/golden/WBV2-P3-002/animation-desktop-report.json
Normal file
186
tests/golden/WBV2-P3-002/animation-desktop-report.json
Normal file
@@ -0,0 +1,186 @@
|
||||
{
|
||||
"action": {
|
||||
"channels": [
|
||||
{
|
||||
"frames": [
|
||||
1.0,
|
||||
10.0,
|
||||
20.0
|
||||
],
|
||||
"index": 0,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "location",
|
||||
"values": [
|
||||
0.0,
|
||||
1.0,
|
||||
2.0
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1.0,
|
||||
10.0,
|
||||
20.0
|
||||
],
|
||||
"index": 1,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "location",
|
||||
"values": [
|
||||
0.0,
|
||||
2.0,
|
||||
0.0
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1.0,
|
||||
10.0,
|
||||
20.0
|
||||
],
|
||||
"index": 2,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "location",
|
||||
"values": [
|
||||
0.0,
|
||||
0.5,
|
||||
1.0
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1.0,
|
||||
10.0,
|
||||
20.0
|
||||
],
|
||||
"index": 0,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "rotation_euler",
|
||||
"values": [
|
||||
0.0,
|
||||
0.1,
|
||||
0.4
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1.0,
|
||||
10.0,
|
||||
20.0
|
||||
],
|
||||
"index": 1,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "rotation_euler",
|
||||
"values": [
|
||||
0.0,
|
||||
0.2,
|
||||
0.1
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1.0,
|
||||
10.0,
|
||||
20.0
|
||||
],
|
||||
"index": 2,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "rotation_euler",
|
||||
"values": [
|
||||
0.0,
|
||||
0.3,
|
||||
0.6
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1.0,
|
||||
10.0,
|
||||
20.0
|
||||
],
|
||||
"index": 0,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "scale",
|
||||
"values": [
|
||||
1.0,
|
||||
1.2,
|
||||
0.9
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1.0,
|
||||
10.0,
|
||||
20.0
|
||||
],
|
||||
"index": 1,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "scale",
|
||||
"values": [
|
||||
1.0,
|
||||
0.8,
|
||||
1.3
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1.0,
|
||||
10.0,
|
||||
20.0
|
||||
],
|
||||
"index": 2,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "scale",
|
||||
"values": [
|
||||
1.0,
|
||||
1.1,
|
||||
1.0
|
||||
]
|
||||
}
|
||||
],
|
||||
"id": "action:WBV2P3002TRSAction:object:WBV2P3002AnimatedCube",
|
||||
"name": "WBV2P3002TRSAction",
|
||||
"targetId": "object:WBV2P3002AnimatedCube"
|
||||
},
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"fixtureSha256": "63b8b79115cf7305931cd92cacaef3a2d7ee68b8690056f402bd129048460b1d",
|
||||
"operation": "ANIMATION_TRS_ACTION_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-002"
|
||||
}
|
||||
213
tests/golden/WBV2-P3-002/animation-report.json
Normal file
213
tests/golden/WBV2-P3-002/animation-report.json
Normal file
@@ -0,0 +1,213 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-002",
|
||||
"operation": "ANIMATION_TRS_ACTION_LOCAL_EXACT",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P3-002-ANIMATION.TRS_ACTION.blend",
|
||||
"sha256": "63b8b79115cf7305931cd92cacaef3a2d7ee68b8690056f402bd129048460b1d"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P3-002/animation-desktop-report.json",
|
||||
"action": {
|
||||
"channels": [
|
||||
{
|
||||
"frames": [
|
||||
1,
|
||||
10,
|
||||
20
|
||||
],
|
||||
"index": 0,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "location",
|
||||
"values": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1,
|
||||
10,
|
||||
20
|
||||
],
|
||||
"index": 1,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "location",
|
||||
"values": [
|
||||
0,
|
||||
2,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1,
|
||||
10,
|
||||
20
|
||||
],
|
||||
"index": 2,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "location",
|
||||
"values": [
|
||||
0,
|
||||
0.5,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1,
|
||||
10,
|
||||
20
|
||||
],
|
||||
"index": 0,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "rotation_euler",
|
||||
"values": [
|
||||
0,
|
||||
0.1,
|
||||
0.4
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1,
|
||||
10,
|
||||
20
|
||||
],
|
||||
"index": 1,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "rotation_euler",
|
||||
"values": [
|
||||
0,
|
||||
0.2,
|
||||
0.1
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1,
|
||||
10,
|
||||
20
|
||||
],
|
||||
"index": 2,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "rotation_euler",
|
||||
"values": [
|
||||
0,
|
||||
0.3,
|
||||
0.6
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1,
|
||||
10,
|
||||
20
|
||||
],
|
||||
"index": 0,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "scale",
|
||||
"values": [
|
||||
1,
|
||||
1.2,
|
||||
0.9
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1,
|
||||
10,
|
||||
20
|
||||
],
|
||||
"index": 1,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "scale",
|
||||
"values": [
|
||||
1,
|
||||
0.8,
|
||||
1.3
|
||||
]
|
||||
},
|
||||
{
|
||||
"frames": [
|
||||
1,
|
||||
10,
|
||||
20
|
||||
],
|
||||
"index": 2,
|
||||
"interpolation": [
|
||||
"BEZIER",
|
||||
"BEZIER",
|
||||
"BEZIER"
|
||||
],
|
||||
"path": "scale",
|
||||
"values": [
|
||||
1,
|
||||
1.1,
|
||||
1
|
||||
]
|
||||
}
|
||||
],
|
||||
"id": "action:WBV2P3002TRSAction:object:WBV2P3002AnimatedCube",
|
||||
"name": "WBV2P3002TRSAction",
|
||||
"targetId": "object:WBV2P3002AnimatedCube"
|
||||
},
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"actionId": "action:WBV2P3002TRSAction:object:WBV2P3002AnimatedCube",
|
||||
"initialRevision": 1,
|
||||
"insertedRevision": 2,
|
||||
"finalRevision": 3,
|
||||
"channelCount": 9,
|
||||
"sampledFrames": [
|
||||
1,
|
||||
10,
|
||||
20,
|
||||
25
|
||||
],
|
||||
"changedInterpolation": "location[0]=LINEAR",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"negative": {
|
||||
"staleFrameCommand": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
|
||||
},
|
||||
"nextTask": "WBV2-P3-003"
|
||||
}
|
||||
33
tests/golden/WBV2-P3-002/manifest.json
Normal file
33
tests/golden/WBV2-P3-002/manifest.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-002",
|
||||
"parentTask": "WBV2-P3-001",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "ANIMATION_TRS_ACTION_LOCAL_EXACT",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P3-001/manifest.json", "sha256": "e3b037fdcf55b5e64fd770c6fa90d0b72e96b3e764a305df0ceee378fa167191"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P3-002-ANIMATION.TRS_ACTION.blend", "sha256": "63b8b79115cf7305931cd92cacaef3a2d7ee68b8690056f402bd129048460b1d"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P3-002.py", "sha256": "554cb2f010c3ad641fd9889fecffb3c229db6d17f0da5d1b3565ae1ecb7b7264"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p3-002-desktop.py", "sha256": "a0a245d402129eb1440be22a061f10a73e432ab26d3078edc8d8bbfa182464dd"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "1f1528c1e365c52013d41c1b4b9b5457e763e536bedc35d8569d38e4c2fdb883"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "fd6f32cc1527dd950d95684b8cf20b2ce513637f7a3e7eaa05f1442986c94d61"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c"},
|
||||
"report": {"path": "tests/golden/WBV2-P3-002/animation-report.json", "sha256": "ac7bb8bbfa6db703c6d128ba5772213f46370be3a986cefcc2da99a1a9aad843"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P3-002/animation-desktop-report.json", "sha256": "b4f6021f1d1f8a3619fe2c6d31438ff06c27ea32f220952b00afbb93cf990b3c"},
|
||||
"status": {"path": "docs/status/WBV2-P3-002.md", "sha256": "c98a2b482dbe0ab075c6d093a596a8fc0907f2d4136abd88379bea862471f434"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P3-002/task-context.json", "sha256": "cd7b2b40ffa32edf31d99d6c05a37a946c2edd9d3d0fd58c3da365bcba4ab01f"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P3-002/command.log", "sha256": "a7ce194f072c321bb9f4ed5739ffc98a8b80c0c596cfb3567f152c802372450b"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"staleFrameCommand": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"saveReopen": "EXACT",
|
||||
"interpolationHandle": "LOCATION_X_LINEAR_AFTER_COMMAND"
|
||||
},
|
||||
"nextTask": "WBV2-P3-003"
|
||||
}
|
||||
180
tests/golden/WBV2-P3-002/task-context.json
Normal file
180
tests/golden/WBV2-P3-002/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-002",
|
||||
"parentTask": "WBV2-P3-001",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable ANIMATION.TRS_ACTION data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "ANIMATION.TRS_ACTION",
|
||||
"ownerFamily": "ANIMATION",
|
||||
"implementationClass": "LOCAL_EXACT"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P3-002.py -- tests/files/web/generated/WBV2-P3-002-ANIMATION.TRS_ACTION.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P3-002",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P3-002"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 1584,
|
||||
"contextRemainingTokens": 395
|
||||
},
|
||||
"source": {
|
||||
"bytes": 8320,
|
||||
"tokens": 2081
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P3-002-ANIMATION.TRS_ACTION.blend",
|
||||
"bytes": 88107,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P3-002.py",
|
||||
"bytes": 1697,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 255189,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 931262,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-002/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P3-002.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-002/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"sampled values and handles match",
|
||||
"stale frame result rejected",
|
||||
"undo/save/reopen stable"
|
||||
],
|
||||
"nextTask": "WBV2-P3-003",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P3-002.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P3-001/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P3-001.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P3-002.md",
|
||||
"tests/golden/WBV2-P3-001/manifest.json",
|
||||
"docs/status/WBV2-P3-001.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-001",
|
||||
"parentTask": "WBV2-P2-005",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P3-002",
|
||||
"artifactCount": 14
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P3-001 status",
|
||||
"- task: `WBV2-P3-001`",
|
||||
"- parent: `WBV2-P2-005`",
|
||||
"- parity: `MATERIAL.PBR_UV`",
|
||||
"- implementationClass: `LOCAL_BOUNDED`",
|
||||
"- status: `done`",
|
||||
"- fixture: `tests/files/web/generated/WBV2-P3-001-MATERIAL.PBR_UV.blend`",
|
||||
"## Evidence"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1719,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 430
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P3-002.md",
|
||||
"bytes": 1719,
|
||||
"lines": 38,
|
||||
"tokens": 430
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-001/manifest.json",
|
||||
"bytes": 2650,
|
||||
"lines": 34,
|
||||
"tokens": 663
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P3-001.md",
|
||||
"bytes": 1152,
|
||||
"lines": 27,
|
||||
"tokens": 288
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2081,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2081,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3105,
|
||||
"serializedContextTokens": 686,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
33
tests/golden/WBV2-P3-003/manifest.json
Normal file
33
tests/golden/WBV2-P3-003/manifest.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-003",
|
||||
"parentTask": "WBV2-P3-002",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "RIG_POSE_SKIN_LOCAL_BOUNDED",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P3-002/manifest.json", "sha256": "cc36b933a2b6d817ea7226c07d0617ecdf2f89575136a83cb15de4e7c8f59188"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P3-003-RIG.POSE_SKIN.blend", "sha256": "1044ac6b81561ef0f5f22578c279de82fcb2d543eff822d0375d59f35bb6d142"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P3-003.py", "sha256": "a811e8bd42890c17cffa0575f8e629a8fe42db2751cef629ed9c2ca5f8cab821"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p3-003-desktop.py", "sha256": "830a084420632c31ec64fc2a4d68d7007a3e5730d8ff29ab0841c6bc8a6a9923"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "2ce9756a1c2f2a858413adf6051aa4147ad0313b2207e02018fc6f6ed3348a6f"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "273702e48f09e29f06f2918a0450a5a5a1852f94f10e3e22bc3a7a91262a7d84"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c"},
|
||||
"report": {"path": "tests/golden/WBV2-P3-003/rig-report.json", "sha256": "13b1227a6dcb02fbbf0d618b6fc8d504fa81a9e7babec1973e9814639a5ea028"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P3-003/rig-desktop-report.json", "sha256": "6331aeeabdfa3a48ab9c1d8fd6cd6fd986b204f1a89d899098539ddbeb678b8f"},
|
||||
"status": {"path": "docs/status/WBV2-P3-003.md", "sha256": "1267edaa74e65c4fa898d574460a8ddad995b501cab6d11542ea585fcebf4b52"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P3-003/task-context.json", "sha256": "a12d0be9cafbb644c7e74946e1d7e5cac4d0bcb212c2cfab8362445c29d90052"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P3-003/command.log", "sha256": "19b83f9e589ff9a81c109b4df70bdb728cd3374a75b5ad7d51e4f5b0c5fbb0dd"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"unsupportedConstraint": "EXPLICIT_LIMIT_ROTATION_TYPE_5",
|
||||
"staleWeightCommand": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"nextTask": "WBV2-P3-004"
|
||||
}
|
||||
209
tests/golden/WBV2-P3-003/rig-desktop-report.json
Normal file
209
tests/golden/WBV2-P3-003/rig-desktop-report.json
Normal file
@@ -0,0 +1,209 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"fixtureSha256": "1044ac6b81561ef0f5f22578c279de82fcb2d543eff822d0375d59f35bb6d142",
|
||||
"operation": "RIG_POSE_SKIN_DESKTOP",
|
||||
"rig": {
|
||||
"armature": {
|
||||
"bones": [
|
||||
{
|
||||
"constraints": [],
|
||||
"head": [
|
||||
0.0,
|
||||
0.0,
|
||||
0.0
|
||||
],
|
||||
"name": "WBV2P3003Root",
|
||||
"parent": null,
|
||||
"poseMatrix": [
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
-1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
],
|
||||
"tail": [
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
},
|
||||
{
|
||||
"constraints": [
|
||||
{
|
||||
"influence": 0.65,
|
||||
"name": "WBV2P3003UnsupportedLimitRotation",
|
||||
"type": "LIMIT_ROTATION"
|
||||
}
|
||||
],
|
||||
"head": [
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
],
|
||||
"name": "WBV2P3003Tip",
|
||||
"parent": "WBV2P3003Root",
|
||||
"poseMatrix": [
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.756875,
|
||||
-0.65356,
|
||||
0.0,
|
||||
0.0,
|
||||
0.65356,
|
||||
0.756875,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
0.0,
|
||||
1.0
|
||||
],
|
||||
"tail": [
|
||||
0.0,
|
||||
0.0,
|
||||
2.0
|
||||
]
|
||||
}
|
||||
],
|
||||
"id": "armature:WBV2P3003Armature",
|
||||
"name": "WBV2P3003Armature",
|
||||
"objectId": "object:WBV2P3003ArmatureObject"
|
||||
},
|
||||
"mesh": {
|
||||
"armatureModifier": {
|
||||
"name": "WBV2P3003ArmatureDeform",
|
||||
"objectId": "object:WBV2P3003ArmatureObject"
|
||||
},
|
||||
"constraints": [
|
||||
{
|
||||
"influence": 0.8,
|
||||
"name": "WBV2P3003BoundedObjectConstraint",
|
||||
"type": "LIMIT_LOCATION"
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
"WBV2P3003Root",
|
||||
"WBV2P3003Tip"
|
||||
],
|
||||
"id": "mesh:WBV2P3003SkinnedMesh",
|
||||
"objectId": "object:WBV2P3003SkinnedMeshObject",
|
||||
"shapeKeys": [
|
||||
{
|
||||
"name": "Basis",
|
||||
"positions": [
|
||||
-1.0,
|
||||
-1.0,
|
||||
0.0,
|
||||
1.0,
|
||||
-1.0,
|
||||
0.0,
|
||||
1.0,
|
||||
1.0,
|
||||
0.0,
|
||||
-1.0,
|
||||
1.0,
|
||||
0.0,
|
||||
-1.0,
|
||||
-1.0,
|
||||
2.0,
|
||||
1.0,
|
||||
-1.0,
|
||||
2.0,
|
||||
1.0,
|
||||
1.0,
|
||||
2.0,
|
||||
-1.0,
|
||||
1.0,
|
||||
2.0
|
||||
],
|
||||
"value": 1.0
|
||||
},
|
||||
{
|
||||
"name": "WBV2P3003Smile",
|
||||
"positions": [
|
||||
-1.0,
|
||||
-1.0,
|
||||
0.0,
|
||||
1.0,
|
||||
-1.0,
|
||||
0.0,
|
||||
1.0,
|
||||
1.0,
|
||||
0.35,
|
||||
-1.0,
|
||||
1.0,
|
||||
0.0,
|
||||
-1.0,
|
||||
-1.0,
|
||||
2.0,
|
||||
1.0,
|
||||
-1.0,
|
||||
2.0,
|
||||
1.0,
|
||||
1.0,
|
||||
2.35,
|
||||
-1.0,
|
||||
1.0,
|
||||
2.0
|
||||
],
|
||||
"value": 0.4
|
||||
}
|
||||
],
|
||||
"weights": [
|
||||
{
|
||||
"WBV2P3003Root": 1.0,
|
||||
"WBV2P3003Tip": 0.0
|
||||
},
|
||||
{
|
||||
"WBV2P3003Root": 1.0,
|
||||
"WBV2P3003Tip": 0.0
|
||||
},
|
||||
{
|
||||
"WBV2P3003Root": 1.0,
|
||||
"WBV2P3003Tip": 0.0
|
||||
},
|
||||
{
|
||||
"WBV2P3003Root": 1.0,
|
||||
"WBV2P3003Tip": 0.0
|
||||
},
|
||||
{
|
||||
"WBV2P3003Root": 0.2,
|
||||
"WBV2P3003Tip": 0.8
|
||||
},
|
||||
{
|
||||
"WBV2P3003Root": 0.2,
|
||||
"WBV2P3003Tip": 0.8
|
||||
},
|
||||
{
|
||||
"WBV2P3003Root": 0.2,
|
||||
"WBV2P3003Tip": 0.8
|
||||
},
|
||||
{
|
||||
"WBV2P3003Root": 0.2,
|
||||
"WBV2P3003Tip": 0.8
|
||||
}
|
||||
]
|
||||
},
|
||||
"unsupportedConstraint": {
|
||||
"name": "WBV2P3003UnsupportedLimitRotation",
|
||||
"status": "EXPLICIT_UNSUPPORTED_BY_WASM_DEPSGRAPH",
|
||||
"type": "LIMIT_ROTATION"
|
||||
}
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-003"
|
||||
}
|
||||
37
tests/golden/WBV2-P3-003/rig-report.json
Normal file
37
tests/golden/WBV2-P3-003/rig-report.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-003",
|
||||
"operation": "RIG_POSE_SKIN_LOCAL_BOUNDED",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P3-003-RIG.POSE_SKIN.blend",
|
||||
"sha256": "1044ac6b81561ef0f5f22578c279de82fcb2d543eff822d0375d59f35bb6d142"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P3-003/rig-desktop-report.json",
|
||||
"armatureId": "armature:WBV2P3003Armature",
|
||||
"boneCount": 2,
|
||||
"groupCount": 2,
|
||||
"shapeKeyCount": 2,
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"armatureId": "armature:WBV2P3003Armature",
|
||||
"meshId": "mesh:WBV2P3003SkinnedMesh",
|
||||
"poseMatrices": "EVALUATED",
|
||||
"weights": "MATCHED",
|
||||
"shapeKey": "MATCHED",
|
||||
"initialRevision": 1,
|
||||
"finalRevision": 3,
|
||||
"editedConstraint": "disabled@0.4",
|
||||
"editedVertex": 4,
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"negative": {
|
||||
"unsupportedConstraint": "EXPLICIT_LIMIT_ROTATION_TYPE_5",
|
||||
"staleWeightCommand": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
|
||||
},
|
||||
"nextTask": "WBV2-P3-004"
|
||||
}
|
||||
180
tests/golden/WBV2-P3-003/task-context.json
Normal file
180
tests/golden/WBV2-P3-003/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-003",
|
||||
"parentTask": "WBV2-P3-002",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable RIG.POSE_SKIN data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "RIG.POSE_SKIN",
|
||||
"ownerFamily": "RIG",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P3-003.py -- tests/files/web/generated/WBV2-P3-003-RIG.POSE_SKIN.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P3-003",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P3-003"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 1327,
|
||||
"contextRemainingTokens": 330
|
||||
},
|
||||
"source": {
|
||||
"bytes": 8577,
|
||||
"tokens": 2146
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P3-003-RIG.POSE_SKIN.blend",
|
||||
"bytes": 88676,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P3-003.py",
|
||||
"bytes": 3475,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 255189,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 940163,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-003/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P3-003.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-003/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"pose matrices and weights match",
|
||||
"unsupported constraint is explicit",
|
||||
"save/reopen and small recovery pass"
|
||||
],
|
||||
"nextTask": "WBV2-P3-004",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P3-003.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P3-002/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P3-002.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P3-003.md",
|
||||
"tests/golden/WBV2-P3-002/manifest.json",
|
||||
"docs/status/WBV2-P3-002.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-002",
|
||||
"parentTask": "WBV2-P3-001",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P3-003",
|
||||
"artifactCount": 14
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P3-002 status",
|
||||
"- task: `WBV2-P3-002`",
|
||||
"- parent: `WBV2-P3-001`",
|
||||
"- parity: `ANIMATION.TRS_ACTION`",
|
||||
"- implementationClass: `LOCAL_EXACT`",
|
||||
"- status: `done`",
|
||||
"- fixture: `tests/files/web/generated/WBV2-P3-002-ANIMATION.TRS_ACTION.blend`",
|
||||
"## Evidence"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1680,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 420
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P3-003.md",
|
||||
"bytes": 1680,
|
||||
"lines": 38,
|
||||
"tokens": 420
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-002/manifest.json",
|
||||
"bytes": 2669,
|
||||
"lines": 34,
|
||||
"tokens": 668
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P3-002.md",
|
||||
"bytes": 1429,
|
||||
"lines": 29,
|
||||
"tokens": 358
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2146,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2146,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3170,
|
||||
"serializedContextTokens": 685,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
89
tests/golden/WBV2-P3-004/glb-desktop-report.json
Normal file
89
tests/golden/WBV2-P3-004/glb-desktop-report.json
Normal file
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"canonical": {
|
||||
"animation": {
|
||||
"actionName": "WBV2P3004RoundTripAction",
|
||||
"channelCount": 3,
|
||||
"frameRange": [
|
||||
1,
|
||||
20
|
||||
]
|
||||
},
|
||||
"material": {
|
||||
"baseColor": [
|
||||
0.22,
|
||||
0.48,
|
||||
0.82,
|
||||
1.0
|
||||
],
|
||||
"imagePacked": true,
|
||||
"metallic": 0.35,
|
||||
"name": "WBV2P3004PBRMaterial",
|
||||
"roughness": 0.42
|
||||
},
|
||||
"mesh": {
|
||||
"name": "WBV2P3004RoundTripMesh",
|
||||
"shapeKeys": [
|
||||
{
|
||||
"name": "WBV2P3004Morph",
|
||||
"value": 0.5,
|
||||
"vertexCount": 8
|
||||
}
|
||||
],
|
||||
"triangleCount": 12,
|
||||
"uvLayers": [
|
||||
"WBV2P3004UV"
|
||||
],
|
||||
"vertexCount": 8
|
||||
},
|
||||
"skin": {
|
||||
"bones": [
|
||||
"WBV2P3004Root",
|
||||
"WBV2P3004Tip"
|
||||
],
|
||||
"parents": {
|
||||
"WBV2P3004Root": null,
|
||||
"WBV2P3004Tip": "WBV2P3004Root"
|
||||
},
|
||||
"vertexGroups": [
|
||||
"WBV2P3004Root",
|
||||
"WBV2P3004Tip"
|
||||
],
|
||||
"weightSums": [
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
1.0
|
||||
],
|
||||
[
|
||||
0.25,
|
||||
0.75
|
||||
],
|
||||
[
|
||||
0.25,
|
||||
0.75
|
||||
],
|
||||
[
|
||||
0.25,
|
||||
0.75
|
||||
],
|
||||
[
|
||||
0.25,
|
||||
0.75
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"fixtureSha256": "64279933b4c2fb00b02496f8e1322893a6c95f8fb99a996c06b8f8323bfbec5d",
|
||||
"operation": "IO_GLB_ROUNDTRIP_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-004"
|
||||
}
|
||||
113
tests/golden/WBV2-P3-004/glb-report.json
Normal file
113
tests/golden/WBV2-P3-004/glb-report.json
Normal file
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-004",
|
||||
"operation": "IO_GLB_ROUNDTRIP_LOCAL_EXACT",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P3-004-IO.GLB_ROUNDTRIP.blend",
|
||||
"sha256": "64279933b4c2fb00b02496f8e1322893a6c95f8fb99a996c06b8f8323bfbec5d"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P3-004/glb-desktop-report.json",
|
||||
"canonical": {
|
||||
"animation": {
|
||||
"actionName": "WBV2P3004RoundTripAction",
|
||||
"channelCount": 3,
|
||||
"frameRange": [
|
||||
1,
|
||||
20
|
||||
]
|
||||
},
|
||||
"material": {
|
||||
"baseColor": [
|
||||
0.22,
|
||||
0.48,
|
||||
0.82,
|
||||
1
|
||||
],
|
||||
"imagePacked": true,
|
||||
"metallic": 0.35,
|
||||
"name": "WBV2P3004PBRMaterial",
|
||||
"roughness": 0.42
|
||||
},
|
||||
"mesh": {
|
||||
"name": "WBV2P3004RoundTripMesh",
|
||||
"shapeKeys": [
|
||||
{
|
||||
"name": "WBV2P3004Morph",
|
||||
"value": 0.5,
|
||||
"vertexCount": 8
|
||||
}
|
||||
],
|
||||
"triangleCount": 12,
|
||||
"uvLayers": [
|
||||
"WBV2P3004UV"
|
||||
],
|
||||
"vertexCount": 8
|
||||
},
|
||||
"skin": {
|
||||
"bones": [
|
||||
"WBV2P3004Root",
|
||||
"WBV2P3004Tip"
|
||||
],
|
||||
"parents": {
|
||||
"WBV2P3004Root": null,
|
||||
"WBV2P3004Tip": "WBV2P3004Root"
|
||||
},
|
||||
"vertexGroups": [
|
||||
"WBV2P3004Root",
|
||||
"WBV2P3004Tip"
|
||||
],
|
||||
"weightSums": [
|
||||
[
|
||||
1
|
||||
],
|
||||
[
|
||||
1
|
||||
],
|
||||
[
|
||||
1
|
||||
],
|
||||
[
|
||||
1
|
||||
],
|
||||
[
|
||||
0.25,
|
||||
0.75
|
||||
],
|
||||
[
|
||||
0.25,
|
||||
0.75
|
||||
],
|
||||
[
|
||||
0.25,
|
||||
0.75
|
||||
],
|
||||
[
|
||||
0.25,
|
||||
0.75
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"glbBytes": 7540,
|
||||
"magic": "glTF",
|
||||
"meshCount": 1,
|
||||
"skinCount": 1,
|
||||
"morphTargetCount": 1,
|
||||
"animationCount": 1,
|
||||
"animationChannelCount": 1,
|
||||
"comparison": "EXACT"
|
||||
},
|
||||
"negative": {
|
||||
"malformed": "REJECTED",
|
||||
"externalUri": "REJECTED_GLB_EXTERNAL_URI_BLOCKED",
|
||||
"overBudget": "REJECTED_GLB_IMPORT_BUDGET_EXCEEDED"
|
||||
},
|
||||
"saveReopen": "EXACT",
|
||||
"nextTask": "WBV2-P3-005"
|
||||
}
|
||||
33
tests/golden/WBV2-P3-004/manifest.json
Normal file
33
tests/golden/WBV2-P3-004/manifest.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-004",
|
||||
"parentTask": "WBV2-P3-003",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "IO_GLB_ROUNDTRIP_LOCAL_EXACT",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P3-003/manifest.json", "sha256": "1b97d2ca9add58a6185a21137729edc4c8b11a2d21be1682793e3d05b9ef9011"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P3-004-IO.GLB_ROUNDTRIP.blend", "sha256": "64279933b4c2fb00b02496f8e1322893a6c95f8fb99a996c06b8f8323bfbec5d"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P3-004.py", "sha256": "b5406e2c3612264c1708f2d8bfb7b90a39b8b179a0beee6fc5a21108e7d1c78c"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p3-004-desktop.py", "sha256": "ff45538a4695331c36f3332a29dc3f745d2cf70c23667ae79988eae654ddae13"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "7c7a0f4a499a186dac777e0f5c1d7b33dba5daa2b507c9a76f560c5c243942e4"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "158e60e76aace9dd55da0ee5edf986886a7fa288bd256c31695d91064cd83e2a"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c"},
|
||||
"report": {"path": "tests/golden/WBV2-P3-004/glb-report.json", "sha256": "9f642f50c7764928909346e91ab11becc5e7e3794760e53ea1d3cef9055e8626"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P3-004/glb-desktop-report.json", "sha256": "cae8772fde2b760ed0dbbb72cbbaeaccba185470267689b283191e549544a18d"},
|
||||
"status": {"path": "docs/status/WBV2-P3-004.md", "sha256": "b219d5102db552d7cb0fb2e0697f6a24ccb071beb5a9c0a1c4b87ca513fdd20a"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P3-004/task-context.json", "sha256": "5c60c5b6f37956f7578723d7ec69374dcf2b19d177cac967b876e427d6791d05"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P3-004/command.log", "sha256": "2b4fb1a8dc840ebe2ddecff73727081af0a4690c0deed0946f99fdd2f9b3fbbe"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"malformed": "REJECTED_GLB_JSON",
|
||||
"externalUri": "REJECTED_GLB_EXTERNAL_URI_BLOCKED",
|
||||
"overBudget": "REJECTED_GLB_IMPORT_BUDGET_EXCEEDED",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"nextTask": "WBV2-P3-005"
|
||||
}
|
||||
180
tests/golden/WBV2-P3-004/task-context.json
Normal file
180
tests/golden/WBV2-P3-004/task-context.json
Normal file
@@ -0,0 +1,180 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-004",
|
||||
"parentTask": "WBV2-P3-003",
|
||||
"status": "in_progress",
|
||||
"goal": "Make the same minimal fixture produce observable IO.GLB_ROUNDTRIP data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
|
||||
"scope": {
|
||||
"gap": "IO.GLB_ROUNDTRIP",
|
||||
"ownerFamily": "IO",
|
||||
"implementationClass": "LOCAL_EXACT"
|
||||
},
|
||||
"commands": [
|
||||
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P3-004.py -- tests/files/web/generated/WBV2-P3-004-IO.GLB_ROUNDTRIP.blend",
|
||||
"npm --prefix web run test:generated-gap -- --task WBV2-P3-004",
|
||||
"node tools/web/check-generated-gap.mjs --task WBV2-P3-004"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 1267,
|
||||
"contextRemainingTokens": 316
|
||||
},
|
||||
"source": {
|
||||
"bytes": 8637,
|
||||
"tokens": 2160
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/files/web/generated/WBV2-P3-004-IO.GLB_ROUNDTRIP.blend",
|
||||
"bytes": 91036,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/generated/WBV2-P3-004.py",
|
||||
"bytes": 4214,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 255189,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/check-generated-gap.mjs",
|
||||
"bytes": 948821,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-004/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P3-004.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-004/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"roundtrip canonical graph matches",
|
||||
"sparse/external URI/budget negatives reject",
|
||||
"no silent loss"
|
||||
],
|
||||
"nextTask": "WBV2-P3-005",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P3-004.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P3-003/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P3-003.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P3-004.md",
|
||||
"tests/golden/WBV2-P3-003/manifest.json",
|
||||
"docs/status/WBV2-P3-003.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-003",
|
||||
"parentTask": "WBV2-P3-002",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P3-004",
|
||||
"artifactCount": 14
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P3-003 status",
|
||||
"- task: `WBV2-P3-003`",
|
||||
"- parent: `WBV2-P3-002`",
|
||||
"- parity: `RIG.POSE_SKIN`",
|
||||
"- implementationClass: `LOCAL_BOUNDED`",
|
||||
"- status: `done`",
|
||||
"- fixture: `tests/files/web/generated/WBV2-P3-003-RIG.POSE_SKIN.blend`",
|
||||
"## Evidence"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1692,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 38,
|
||||
"taskTokens": 423
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2799,
|
||||
"lines": 51,
|
||||
"tokens": 700
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P3-004.md",
|
||||
"bytes": 1692,
|
||||
"lines": 38,
|
||||
"tokens": 423
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P3-003/manifest.json",
|
||||
"bytes": 2647,
|
||||
"lines": 34,
|
||||
"tokens": 662
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P3-003.md",
|
||||
"bytes": 1499,
|
||||
"lines": 29,
|
||||
"tokens": 375
|
||||
}
|
||||
],
|
||||
"sourceTokens": 2160,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 2160,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3184,
|
||||
"serializedContextTokens": 684,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
31
tests/golden/WBV2-P3-005/library-desktop-report.json
Normal file
31
tests/golden/WBV2-P3-005/library-desktop-report.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"blenderVersion": "5.2.0 LTS",
|
||||
"fixtureSha256": "86af081b949ac96d6431303464852b4e983cf8c3d05671cacb36e1de4267a425",
|
||||
"operation": "ASSET_LIBRARY_OWNERSHIP_DESKTOP",
|
||||
"saveReopen": "EXACT",
|
||||
"schemaVersion": 1,
|
||||
"sourceClosure": {
|
||||
"image": "WBV2P3005AppendImage",
|
||||
"imagePacked": true,
|
||||
"material": "WBV2P3005AppendMaterial",
|
||||
"mesh": "WBV2P3005AppendMesh",
|
||||
"object": "WBV2P3005AppendObject"
|
||||
},
|
||||
"sourceSha256": "dcda742db77c6af5e05b79e006a0bd89cf1e8ea8d438592cd1ed2e981c7aca76",
|
||||
"state": {
|
||||
"library": {
|
||||
"dependencyIds": [],
|
||||
"name": "WBV2P3005Library.blend",
|
||||
"packed": false,
|
||||
"readOnly": true,
|
||||
"sourcePath": "//WBV2P3005Library.blend"
|
||||
},
|
||||
"linked": {
|
||||
"library": "WBV2P3005Library.blend",
|
||||
"name": "WBV2P3005LinkedObject",
|
||||
"override": false,
|
||||
"readOnly": true
|
||||
}
|
||||
},
|
||||
"task": "WBV2-P3-005"
|
||||
}
|
||||
82
tests/golden/WBV2-P3-005/library-report.json
Normal file
82
tests/golden/WBV2-P3-005/library-report.json
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-005",
|
||||
"operation": "ASSET_LIBRARY_APPEND_LINK_OVERRIDE_LOCAL_BOUNDED",
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P3-005-ASSET.LIBRARY_OPERATIONS.blend",
|
||||
"sha256": "86af081b949ac96d6431303464852b4e983cf8c3d05671cacb36e1de4267a425"
|
||||
},
|
||||
"sourceLibrary": {
|
||||
"path": "tests/files/web/generated/WBV2P3005Library.blend",
|
||||
"sha256": "dcda742db77c6af5e05b79e006a0bd89cf1e8ea8d438592cd1ed2e981c7aca76",
|
||||
"sourceLibraryId": "library:58cde9b79f9fc987dfdac773f4e21d9b3c21a5633f29766342c5e14c7b5eed66",
|
||||
"locator": "//WBV2P3005Library.blend"
|
||||
},
|
||||
"desktop": {
|
||||
"status": "EXACT",
|
||||
"report": "tests/golden/WBV2-P3-005/library-desktop-report.json",
|
||||
"library": {
|
||||
"dependencyIds": [],
|
||||
"name": "WBV2P3005Library.blend",
|
||||
"packed": false,
|
||||
"readOnly": true,
|
||||
"sourcePath": "//WBV2P3005Library.blend"
|
||||
},
|
||||
"linked": {
|
||||
"library": "WBV2P3005Library.blend",
|
||||
"name": "WBV2P3005LinkedObject",
|
||||
"override": false,
|
||||
"readOnly": true
|
||||
},
|
||||
"sourceClosure": {
|
||||
"image": "WBV2P3005AppendImage",
|
||||
"imagePacked": true,
|
||||
"material": "WBV2P3005AppendMaterial",
|
||||
"mesh": "WBV2P3005AppendMesh",
|
||||
"object": "WBV2P3005AppendObject"
|
||||
},
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"wasm": {
|
||||
"status": "EXACT",
|
||||
"initialRevision": 1,
|
||||
"appendedRevision": 2,
|
||||
"appendedObjectId": "object:WBV2P3005AppendObject",
|
||||
"appendedImageStatus": "PACKED",
|
||||
"appendedImagePacked": true,
|
||||
"appendSourceLibraryId": "library:58cde9b79f9fc987dfdac773f4e21d9b3c21a5633f29766342c5e14c7b5eed66",
|
||||
"appendOwner": {
|
||||
"kind": "LOCAL_MAIN",
|
||||
"projectId": "project:wbv2-p3-005",
|
||||
"localDataBlockId": "Object/WBV2P3005AppendObject"
|
||||
},
|
||||
"linkOwner": {
|
||||
"kind": "SOURCE_LIBRARY",
|
||||
"sourceLibraryId": "library:58cde9b79f9fc987dfdac773f4e21d9b3c21a5633f29766342c5e14c7b5eed66",
|
||||
"sourceDataBlockId": "Object/WBV2P3005LinkedObject"
|
||||
},
|
||||
"overrideOwner": {
|
||||
"kind": "LOCAL_OVERRIDE",
|
||||
"projectId": "project:wbv2-p3-005",
|
||||
"localDataBlockId": "Object/WBV2P3005OverrideObject",
|
||||
"referenceSourceDataBlockId": "Object/WBV2P3005LinkedObject",
|
||||
"hierarchyRootDataBlockId": "Object/WBV2P3005OverrideObject"
|
||||
},
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"protocol": {
|
||||
"override": "READY",
|
||||
"reload": "REPLACED",
|
||||
"missing": "MARKED"
|
||||
},
|
||||
"negative": {
|
||||
"staleAppend": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"collisionAppend": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"linkedMutation": "REJECTED_BY_OWNERSHIP",
|
||||
"staleOverride": "BLOCKED_REVISION_CONFLICT",
|
||||
"staleReload": "STALE_REVISION",
|
||||
"staleMissingHash": "STALE_SOURCE_HASH",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
|
||||
},
|
||||
"nextTask": "WBV2-P4-001"
|
||||
}
|
||||
38
tests/golden/WBV2-P3-005/manifest.json
Normal file
38
tests/golden/WBV2-P3-005/manifest.json
Normal file
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P3-005",
|
||||
"parentTask": "WBV2-P3-004",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "BLENDER_5_2_WASM_MAIN",
|
||||
"operation": "ASSET_LIBRARY_APPEND_LINK_OVERRIDE_LOCAL_BOUNDED",
|
||||
"status": "done",
|
||||
"artifacts": {
|
||||
"parentManifest": {"path": "tests/golden/WBV2-P3-004/manifest.json", "sha256": "bb4f2783eaa78a0104045048fc9f5d925a78e5a2539f5f1b9e699a067d05fa27"},
|
||||
"fixture": {"path": "tests/files/web/generated/WBV2-P3-005-ASSET.LIBRARY_OPERATIONS.blend", "sha256": "86af081b949ac96d6431303464852b4e983cf8c3d05671cacb36e1de4267a425"},
|
||||
"sourceLibrary": {"path": "tests/files/web/generated/WBV2P3005Library.blend", "sha256": "dcda742db77c6af5e05b79e006a0bd89cf1e8ea8d438592cd1ed2e981c7aca76"},
|
||||
"generator": {"path": "tools/web/generated/WBV2-P3-005.py", "sha256": "50e5f7b3db1fec8eb3e2aa22e7ce4a8d40cb1ef01c8ec8dda59a3a3fe06c0253"},
|
||||
"desktopChecker": {"path": "tools/web/check-wbv2-p3-005-desktop.py", "sha256": "4605e4a453e8b767fc187f0de69a51100a46a4d78d03a03d7ec1adb43fa376ee"},
|
||||
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
|
||||
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "c3f5e581e460d9c44beea583b241e5b56ae0d163e134bd7862bc03d10a7bb13a"},
|
||||
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "158dcb322959d845908a5414952ce9300e524de7cd85b3773472d05fe52549dd"},
|
||||
"wasmJavaScript": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "e2b21fcc3c9d098cfb343fc682776c2ed95678064e95eabd71409a8b3284cce0"},
|
||||
"wasmBinary": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c"},
|
||||
"report": {"path": "tests/golden/WBV2-P3-005/library-report.json", "sha256": "0b572a5b480dd9b123cbb9c55c842fb002b1a8a6c96afd196af90bee1ebd9940"},
|
||||
"desktopReport": {"path": "tests/golden/WBV2-P3-005/library-desktop-report.json", "sha256": "eb8512d3fd78e8588284b9acb2f6b3eaf72f2c36912483f1dc030da3464f8cdd"},
|
||||
"status": {"path": "docs/status/WBV2-P3-005.md", "sha256": "b1ef6eff8c5f0d64d651de2dffe0d2c914e8726711c42259ee7c0cc3bbcd1cd6"},
|
||||
"taskContext": {"path": "tests/golden/WBV2-P3-005/task-context.json", "sha256": "df8ed12aa4ecb585e59eb212ea4d16fbc0dc1299668a44283fcde9886ddc912f"},
|
||||
"commandLog": {"path": "tests/golden/WBV2-P3-005/command.log", "sha256": "f72bc26c0000a8d38a6ccf91690567d17974d3fdd9226a314bfaf4720d2af6ab"}
|
||||
},
|
||||
"negativeMatrix": {
|
||||
"staleAppend": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"collisionAppend": "REJECTED_WITHOUT_REVISION_CHANGE",
|
||||
"linkedMutation": "REJECTED_BY_OWNERSHIP",
|
||||
"staleOverride": "BLOCKED_REVISION_CONFLICT",
|
||||
"staleReload": "STALE_REVISION",
|
||||
"staleMissingHash": "STALE_SOURCE_HASH",
|
||||
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"nextTask": "WBV2-P4-001"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user