Rebuild local Blender WASM environment and recovery evidence
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-08-27 20:15:55 +08:00
parent a081c68c87
commit c2c65d3a09
376 changed files with 241951 additions and 114 deletions

View 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"
}

File diff suppressed because it is too large Load Diff

View 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"
}

File diff suppressed because it is too large Load Diff

View 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"
}
}

View 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
}
}

View File

@@ -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"
}

View 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"
}

View 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"
}

View 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
}
}

View 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"
}

View 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"
}

View 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"
}

View 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
}
}

View 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"
}

View 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"
}

View 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"
}

View 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
}
}

View 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"
}

View 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
}
}

View 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"
}

View 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"
}

View 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"
}

View 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
}
}

View File

@@ -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"
}

View 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"
}

View 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"
}

View 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"
}

View 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"
}

View 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
}
}

View File

@@ -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"
}

View 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"
}

View 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"
}

View 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
}
}

View 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"
}

View File

@@ -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"
}

View 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"
}

View 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
}
}

View 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"
}

View 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"
}

View 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"
}

View 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
}
}

View 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"
}

View 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
}
}

View 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"
}

View 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"
}

View 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"
}

View 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
}
}

View 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"
}

View 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"
}

View 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"
}

View 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"
}

View 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"
}

View 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
}
}

View 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"
}

View 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"
}

View 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"
}

View 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
}
}

View 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"
}

View 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"
}

View 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"
}

View 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
}
}

View 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"
}

View 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"
}

View 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"
}

View 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
}
}

View 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"
}

View 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"
}

View 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"
}

View File

@@ -0,0 +1,180 @@
{
"schemaVersion": 1,
"task": "WBV2-P3-005",
"parentTask": "WBV2-P3-004",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable ASSET.LIBRARY_OPERATIONS 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": "ASSET.LIBRARY_OPERATIONS",
"ownerFamily": "ASSET",
"implementationClass": "LOCAL_BOUNDED"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P3-005.py -- tests/files/web/generated/WBV2-P3-005-ASSET.LIBRARY_OPERATIONS.blend",
"npm --prefix web run test:generated-gap -- --task WBV2-P3-005",
"node tools/web/check-generated-gap.mjs --task WBV2-P3-005"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1284,
"contextRemainingTokens": 319
},
"source": {
"bytes": 8620,
"tokens": 2157
},
"selected": [],
"excluded": [
{
"path": "tests/files/web/generated/WBV2-P3-005-ASSET.LIBRARY_OPERATIONS.blend",
"bytes": 85884,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/generated/WBV2-P3-005.py",
"bytes": 3301,
"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": 962579,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P3-005/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P3-005.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P3-005/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"source/hash/owner identity preserved",
"linked mutation blocked",
"stale generation and missing source fail closed"
],
"nextTask": "WBV2-P4-001",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P3-005.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P3-004/manifest.json",
"parentStatus": "docs/status/WBV2-P3-004.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P3-005.md",
"tests/golden/WBV2-P3-004/manifest.json",
"docs/status/WBV2-P3-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-P3-004",
"parentTask": "WBV2-P3-003",
"status": "done",
"nextTask": "WBV2-P3-005",
"artifactCount": 14
},
"statusSummary": [
"# WBV2-P3-004 status",
"- task: `WBV2-P3-004`",
"- parent: `WBV2-P3-003`",
"- parity: `IO.GLB_ROUNDTRIP`",
"- implementationClass: `LOCAL_EXACT`",
"- status: `done`",
"- fixture: `tests/files/web/generated/WBV2-P3-004-IO.GLB_ROUNDTRIP.blend`",
"## Evidence"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1737,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 435
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2799,
"lines": 51,
"tokens": 700
},
{
"path": "docs/tasks/WBV2-P3-005.md",
"bytes": 1737,
"lines": 38,
"tokens": 435
},
{
"path": "tests/golden/WBV2-P3-004/manifest.json",
"bytes": 2621,
"lines": 34,
"tokens": 656
},
{
"path": "docs/status/WBV2-P3-004.md",
"bytes": 1463,
"lines": 29,
"tokens": 366
}
],
"sourceTokens": 2157,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 2157,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3181,
"serializedContextTokens": 695,
"withinBudget": true
}
}

View File

@@ -0,0 +1,35 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-001",
"parentTask": "WBV2-P3-005",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_WASM_MAIN",
"operation": "MODIFIER_DECLARED_SLICES_LOCAL_BOUNDED",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/WBV2-P3-005/manifest.json", "sha256": "42dc02d198630c2735c5a0a1beab37f2a98ff0233927215099f67606d248c39e"},
"fixture": {"path": "tests/files/web/generated/WBV2-P4-001-MODIFIER.DECLARED_SLICES.blend", "sha256": "02e56fd6745d983ee9f5ee3f48e581f116f0c41c2d2e7dec062517b4af86718f"},
"generator": {"path": "tools/web/generated/WBV2-P4-001.py", "sha256": "30df1e0d94b6c439203f6def7a5136f109da6a23839c59a766c12db8cc294eb2"},
"desktopChecker": {"path": "tools/web/check-wbv2-p4-001-desktop.py", "sha256": "9b62082a9d43eb614a7922428cdfa2f86ca31bf6d3ba61d4292615e1f224fe43"},
"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": "c74eda4e746f5ef1d93d8e9a188fe4a0624a4acb26658c410f096db495411e62"},
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "828a54bbe5a83ab43b82da278bd373c5ab7eaeb2d31ec1fe4f5f8b7ff614b0d3"},
"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-P4-001/modifier-report.json", "sha256": "65d2cf962511ae181e53cda1cc01f8db46819ee450a470384abbe829d549adf8"},
"desktopReport": {"path": "tests/golden/WBV2-P4-001/modifier-desktop-report.json", "sha256": "23a348e30dc67f796b0ca44abcf7ef7aac932af146178c8dccbce40170431b8a"},
"status": {"path": "docs/status/WBV2-P4-001.md", "sha256": "957816b2d29edcc076669d6c0adde66ae0012191899773a37a5cb986b38a9ce1"},
"taskContext": {"path": "tests/golden/WBV2-P4-001/task-context.json", "sha256": "7d7109550a359138fd7f4a2c9336d625555c3fa2620e1f3b516e4ee39490b763"},
"commandLog": {"path": "tests/golden/WBV2-P4-001/command.log", "sha256": "03d98bd745da53fcec3580105171078edbca9a3c55683dfe6d08a078b4c107fd"}
},
"negativeMatrix": {
"unknownModifier": "RETAINED_BLOCKED",
"staleDecimateProfile": "REJECTED_WITHOUT_REVISION_CHANGE",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
"saveReopen": "EXACT"
},
"nextTask": "WBV2-P4-002"
}

View File

@@ -0,0 +1,39 @@
{
"blenderVersion": "5.2.0 LTS",
"fixtureSha256": "02e56fd6745d983ee9f5ee3f48e581f116f0c41c2d2e7dec062517b4af86718f",
"operation": "MODIFIER_DECLARED_SLICES_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"state": {
"modifiers": [
{
"name": "WBV2P4001Bevel",
"showEditMode": true,
"showOnCage": false,
"showRender": true,
"showViewport": true,
"type": "BEVEL"
},
{
"name": "WBV2P4001Decimate",
"showEditMode": false,
"showOnCage": false,
"showRender": false,
"showViewport": true,
"type": "DECIMATE"
},
{
"name": "WBV2P4001UnsupportedParticle",
"showEditMode": false,
"showOnCage": false,
"showRender": false,
"showViewport": true,
"type": "PARTICLE_SYSTEM"
}
],
"object": "WBV2P4001ModifierObject",
"polygonCount": 12,
"vertexCount": 8
},
"task": "WBV2-P4-001"
}

View File

@@ -0,0 +1,40 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-001",
"operation": "MODIFIER_DECLARED_SLICES_LOCAL_BOUNDED",
"fixture": {
"path": "tests/files/web/generated/WBV2-P4-001-MODIFIER.DECLARED_SLICES.blend",
"sha256": "02e56fd6745d983ee9f5ee3f48e581f116f0c41c2d2e7dec062517b4af86718f"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/WBV2-P4-001/modifier-desktop-report.json",
"modifierTypes": [
"BEVEL",
"DECIMATE",
"PARTICLE_SYSTEM"
],
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"meshId": "mesh:WBV2P4001ModifierMesh",
"modifierTypes": [
"BEVEL",
"DECIMATE",
"PARTICLE_SYSTEM"
],
"blockedModifier": "modifier:object:WBV2P4001ModifierObject:336849697",
"initialRevision": 1,
"finalRevision": 6,
"appliedVertexCount": 6,
"appliedTriangleCount": 8,
"saveReopen": "EXACT"
},
"negative": {
"unknownModifier": "RETAINED_BLOCKED",
"staleDecimateProfile": "REJECTED_WITHOUT_REVISION_CHANGE",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "WBV2-P4-002"
}

View File

@@ -0,0 +1,180 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-001",
"parentTask": "WBV2-P3-005",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable MODIFIER.DECLARED_SLICES 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": "MODIFIER.DECLARED_SLICES",
"ownerFamily": "MODIFIER",
"implementationClass": "LOCAL_BOUNDED"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P4-001.py -- tests/files/web/generated/WBV2-P4-001-MODIFIER.DECLARED_SLICES.blend",
"npm --prefix web run test:generated-gap -- --task WBV2-P4-001",
"node tools/web/check-generated-gap.mjs --task WBV2-P4-001"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 459,
"contextRemainingTokens": 114
},
"source": {
"bytes": 9445,
"tokens": 2362
},
"selected": [],
"excluded": [
{
"path": "tests/files/web/generated/WBV2-P4-001-MODIFIER.DECLARED_SLICES.blend",
"bytes": 87318,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/generated/WBV2-P4-001.py",
"bytes": 1803,
"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": 969047,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P4-001/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P4-001.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P4-001/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"desktop/evaluated Main match",
"unknown modifier retained and blocked",
"apply/undo/save/reopen stable"
],
"nextTask": "WBV2-P4-002",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P4-001.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P3-005/manifest.json",
"parentStatus": "docs/status/WBV2-P3-005.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P4-001.md",
"tests/golden/WBV2-P3-005/manifest.json",
"docs/status/WBV2-P3-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-P3-005",
"parentTask": "WBV2-P3-004",
"status": "done",
"nextTask": "WBV2-P4-001",
"artifactCount": 15
},
"statusSummary": [
"# WBV2-P3-005 status",
"- task: `WBV2-P3-005`",
"- parent: `WBV2-P3-004`",
"- parity: `ASSET.LIBRARY_OPERATIONS`",
"- implementationClass: `LOCAL_BOUNDED`",
"- status: `done`",
"- fixture: `tests/files/web/generated/WBV2-P3-005-ASSET.LIBRARY_OPERATIONS.blend`",
"## Evidence"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1740,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 435
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2799,
"lines": 51,
"tokens": 700
},
{
"path": "docs/tasks/WBV2-P4-001.md",
"bytes": 1740,
"lines": 38,
"tokens": 435
},
{
"path": "tests/golden/WBV2-P3-005/manifest.json",
"bytes": 3016,
"lines": 39,
"tokens": 754
},
{
"path": "docs/status/WBV2-P3-005.md",
"bytes": 1890,
"lines": 29,
"tokens": 473
}
],
"sourceTokens": 2362,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 2362,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3386,
"serializedContextTokens": 693,
"withinBudget": true
}
}

View File

@@ -0,0 +1,40 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-002",
"parentTask": "WBV2-P4-001",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_WASM_MAIN",
"operation": "NODES_ALLOWLIST_LOCAL_BOUNDED",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/WBV2-P4-001/manifest.json", "sha256": "6f1bee73c987f5e66733feb03d1d708e0f2dbd0776ac6634dbf694cde385143c"},
"fixture": {"path": "tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend", "sha256": "df1ad2e270112c081a96b2bc2c2da1bc8272bc82ba6c33ae56c0b2d24e3d5c4e"},
"generator": {"path": "tools/web/generated/WBV2-P4-002.py", "sha256": "210a9cfd099e3962f113d6848d61a045ea0e874a01d34ec64c6e8c49156316b7"},
"desktopChecker": {"path": "tools/web/check-wbv2-p4-002-desktop.py", "sha256": "38aaec097d6a9c2a477707627905082c642d044c8a83453e3d7c30d588283a01"},
"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"},
"geometryProtocol": {"path": "web/protocol/geometry-nodes.ts", "sha256": "8d04291c29e9ce30e3f2f6d4141bc4101d49529bf7f7edf109d67d059efa58b1"},
"shaderGraphProtocol": {"path": "web/protocol/shader-graph.ts", "sha256": "6e9421743925b30ac7aee7c39d7a9cc38632f22584675ec5286685f442b12683"},
"shaderCompiler": {"path": "web/protocol/shader-compiler.ts", "sha256": "acd5f8deb2912f6823533df12baba8049c5e64d440c17a6dc3f90741f71774b2"},
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "35bcec8575fa3985ea31868db999ece6dbeddc96f79069b77a204d7f0f811190"},
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "24564d280a73a28cb281d416485452a8b78e1d01b8fa5f72cdde0f314af3af47"},
"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-P4-002/nodes-report.json", "sha256": "258bbbcb5ba4b1a5b8163f2841b833397ff560357538b4a419381ec9a67af8c7"},
"desktopReport": {"path": "tests/golden/WBV2-P4-002/nodes-desktop-report.json", "sha256": "3a712f3e7f6503a1480c4e19ee824c6fddaad499930257d8baa36021531f4e74"},
"status": {"path": "docs/status/WBV2-P4-002.md", "sha256": "b165d7e641d83804a1d779aeae4eae913cdfe6bf14422a5b7d47fa2dd5ace359"},
"taskContext": {"path": "tests/golden/WBV2-P4-002/task-context.json", "sha256": "9a9bc55a6c85f5296b757b017ba05d5fa3ea357083f8d07beff65502211cf9d3"},
"commandLog": {"path": "tests/golden/WBV2-P4-002/command.log", "sha256": "33aa0d1a258fe9a1f32ecd6211497bbb8b6756577c92af63dbb31ef2d2eb9a9a"}
},
"negativeMatrix": {
"unknownGeometryNode": "BLOCKED_BEFORE_COMMIT",
"geometryNodeBudget": "REJECTED_WITHOUT_REVISION_CHANGE",
"unknownShaderNode": "BLOCKED_BEFORE_COMMIT",
"compileFailureRollback": "REJECTED_WITHOUT_REVISION_CHANGE",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
"saveReopen": "EXACT"
},
"nextTask": "WBV2-P4-003"
}

View File

@@ -0,0 +1,80 @@
{
"blenderVersion": "5.2.0 LTS",
"fixtureSha256": "df1ad2e270112c081a96b2bc2c2da1bc8272bc82ba6c33ae56c0b2d24e3d5c4e",
"operation": "NODES_ALLOWLIST_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"state": {
"graphs": [
{
"interface": [
{
"inOut": "OUTPUT",
"name": "Geometry",
"socketType": "NodeSocketGeometry"
},
{
"inOut": "INPUT",
"name": "Geometry",
"socketType": "NodeSocketGeometry"
}
],
"linkCount": 2,
"name": "WBV2P4002SupportedGraph",
"nodeNames": [
"WBV2P4002 Group Input",
"WBV2P4002 Group Output",
"WBV2P4002 Transform"
],
"nodeTypes": [
"GeometryNodeTransform",
"NodeGroupInput",
"NodeGroupOutput"
],
"type": "GeometryNodeTree"
},
{
"interface": [
{
"inOut": "OUTPUT",
"name": "Geometry",
"socketType": "NodeSocketGeometry"
},
{
"inOut": "INPUT",
"name": "Geometry",
"socketType": "NodeSocketGeometry"
}
],
"linkCount": 2,
"name": "WBV2P4002BlockedGraph",
"nodeNames": [
"WBV2P4002 Group Input",
"WBV2P4002 Group Output",
"WBV2P4002 Unsupported Distribute"
],
"nodeTypes": [
"GeometryNodeDistributePointsOnFaces",
"NodeGroupInput",
"NodeGroupOutput"
],
"type": "GeometryNodeTree"
}
],
"material": {
"linkCount": 2,
"name": "WBV2P4002ShaderMaterial",
"nodeNames": [
"Material Output",
"Principled BSDF",
"WBV2P4002 RGB"
],
"nodeTypes": [
"ShaderNodeBsdfPrincipled",
"ShaderNodeOutputMaterial",
"ShaderNodeRGB"
]
}
},
"task": "WBV2-P4-002"
}

View File

@@ -0,0 +1,54 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-002",
"operation": "NODES_ALLOWLIST_LOCAL_BOUNDED",
"fixture": {
"path": "tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend",
"sha256": "df1ad2e270112c081a96b2bc2c2da1bc8272bc82ba6c33ae56c0b2d24e3d5c4e"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/WBV2-P4-002/nodes-desktop-report.json",
"graphs": [
{
"name": "WBV2P4002SupportedGraph",
"nodeTypes": [
"GeometryNodeTransform",
"NodeGroupInput",
"NodeGroupOutput"
],
"linkCount": 2
},
{
"name": "WBV2P4002BlockedGraph",
"nodeTypes": [
"GeometryNodeDistributePointsOnFaces",
"NodeGroupInput",
"NodeGroupOutput"
],
"linkCount": 2
}
],
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"graphCount": 2,
"supportedGraph": "WBV2P4002SupportedGraph",
"blockedNodeTypes": [
"GeometryNodeDistributePointsOnFaces"
],
"shaderCompile": "COMPILED",
"compileKey": "168f4684772b2a264ed75aebbbd0d4955a9ef6e5bd4f1469a95b342b21e7bb3d",
"revisionAfterShader": 2,
"saveReopen": "EXACT"
},
"negative": {
"unknownGeometryNode": "BLOCKED_BEFORE_COMMIT",
"geometryNodeBudget": "REJECTED_WITHOUT_REVISION_CHANGE",
"unknownShaderNode": "BLOCKED_BEFORE_COMMIT",
"compileFailureRollback": "REJECTED_WITHOUT_REVISION_CHANGE",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "WBV2-P4-003"
}

View File

@@ -0,0 +1,180 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-002",
"parentTask": "WBV2-P4-001",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable NODES.ALLOWLIST 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": "NODES.ALLOWLIST",
"ownerFamily": "NODES",
"implementationClass": "LOCAL_BOUNDED"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P4-002.py -- tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend",
"npm --prefix web run test:generated-gap -- --task WBV2-P4-002",
"node tools/web/check-generated-gap.mjs --task WBV2-P4-002"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 712,
"contextRemainingTokens": 177
},
"source": {
"bytes": 9192,
"tokens": 2299
},
"selected": [],
"excluded": [
{
"path": "tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend",
"bytes": 90698,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/generated/WBV2-P4-002.py",
"bytes": 3497,
"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": 978902,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P4-002/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P4-002.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P4-002/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"node/socket/link/default parity",
"budget and unknown-node block before commit",
"compile failure rolls back"
],
"nextTask": "WBV2-P4-003",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P4-002.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P4-001/manifest.json",
"parentStatus": "docs/status/WBV2-P4-001.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P4-002.md",
"tests/golden/WBV2-P4-001/manifest.json",
"docs/status/WBV2-P4-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-P4-001",
"parentTask": "WBV2-P3-005",
"status": "done",
"nextTask": "WBV2-P4-002",
"artifactCount": 16
},
"statusSummary": [
"# WBV2-P4-001 status",
"- task: `WBV2-P4-001`",
"- parent: `WBV2-P3-005`",
"- parity: `MODIFIER.DECLARED_SLICES`",
"- implementationClass: `LOCAL_BOUNDED`",
"- status: `done`",
"- fixture: `tests/files/web/generated/WBV2-P4-001-MODIFIER.DECLARED_SLICES.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-P4-002.md",
"bytes": 1692,
"lines": 38,
"tokens": 423
},
{
"path": "tests/golden/WBV2-P4-001/manifest.json",
"bytes": 3016,
"lines": 36,
"tokens": 754
},
{
"path": "docs/status/WBV2-P4-001.md",
"bytes": 1685,
"lines": 29,
"tokens": 422
}
],
"sourceTokens": 2299,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 2299,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3323,
"serializedContextTokens": 687,
"withinBudget": true
}
}

View File

@@ -0,0 +1,39 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-003",
"parentTask": "WBV2-P4-002",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_WASM_MAIN",
"operation": "SCULPT_NONMESH_PAINT_BOUNDED_LOCAL_BOUNDED",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/WBV2-P4-002/manifest.json", "sha256": "2b9e907fa11470b354bbb98695696bcdfae5c654ef03373b1eb2230098f28142"},
"fixture": {"path": "tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend", "sha256": "88e64b7ca103025111891c3dbdb78d5dd038c99d77d46831414ee984ee16d161"},
"generator": {"path": "tools/web/generated/WBV2-P4-003.py", "sha256": "1ea38a48702f9df0600dec5ebb27498e8699a30cb5bd4ed9f4ded0a22d757ac1"},
"desktopChecker": {"path": "tools/web/check-wbv2-p4-003-desktop.py", "sha256": "87576e43dba1654e4c26c037032bc92e96e953c917ce86c2bf38878e17385f66"},
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
"productionMainState": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "3c31a049714860cc89c5b28ebad887a1978df11f8c528c3dfd7836635ed62fb3"},
"productionApi": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", "sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"},
"sculptProtocol": {"path": "web/protocol/sculpt.ts", "sha256": "f2ca6c49a5fb110fe837a462d1da115076c032649b5a78eb640a77fe7d049b8b"},
"paintPbvhProtocol": {"path": "web/protocol/paint-pbvh-capability.ts", "sha256": "749eb772f0cdeb0fe79c058391a47fdf680dc331db300a91a22d324e535f32c5"},
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "31f52cd0c027cdbb7a79530147b70e830d6e94becf57cbd7133591d55bb4e04f"},
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "2b34dca1d199d71d6e65c3b8426463d926a790083c140607445056d20d1fdc55"},
"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-P4-003/sculpt-report.json", "sha256": "de29aabbb753b682d85c30258ff4d68530650d00e167f30181d5c9a68669dd99"},
"desktopReport": {"path": "tests/golden/WBV2-P4-003/sculpt-desktop-report.json", "sha256": "a890aab8336bd9fac900ce9f8c143708476b6a16d19a9ee4a6154c974a3807b6"},
"status": {"path": "docs/status/WBV2-P4-003.md", "sha256": "e3e0bebbcd979c4b59b4c3f1744dc82095e55a52d9875c59e53e7f052c507d9f"},
"taskContext": {"path": "tests/golden/WBV2-P4-003/task-context.json", "sha256": "34bf26c4b70438b5f88ce87ba96666d71597049c65752462627015711a518e78"},
"commandLog": {"path": "tests/golden/WBV2-P4-003/command.log", "sha256": "4616e0a4eb2484b707380bfe6ea08c72831df6856e554a53c02bc0fef5c71946"}
},
"negativeMatrix": {
"unsupportedBrush": "BLOCKED_BEFORE_COMMIT",
"invalidAttributes": "REJECTED_WITHOUT_REVISION_CHANGE",
"pbvhUnavailable": "BLOCKED_STABLE_CODE",
"stalePBVH": "REVISION_CONFLICT",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
"saveReopen": "EXACT"
},
"nextTask": "WBV2-P4-004"
}

View File

@@ -0,0 +1,40 @@
{
"blenderVersion": "5.2.0 LTS",
"fixtureSha256": "88e64b7ca103025111891c3dbdb78d5dd038c99d77d46831414ee984ee16d161",
"operation": "SCULPT_NONMESH_PAINT_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"state": {
"mesh": {
"faceCount": 5,
"faceSets": [
1,
2,
3,
4,
5
],
"mask": [
0.0,
0.25,
0.5,
0.75,
1.0
],
"name": "WBV2P4003SculptObject",
"vertexCount": 5
},
"nonMesh": {
"curve": {
"name": "WBV2P4003Curve",
"pointCount": 3,
"splineCount": 1
},
"pointCloud": {
"name": "WBV2P4003PointCloud",
"pointCount": 3
}
}
},
"task": "WBV2-P4-003"
}

View File

@@ -0,0 +1,63 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-003",
"operation": "SCULPT_NONMESH_PAINT_BOUNDED_LOCAL_BOUNDED",
"fixture": {
"path": "tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend",
"sha256": "88e64b7ca103025111891c3dbdb78d5dd038c99d77d46831414ee984ee16d161"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/WBV2-P4-003/sculpt-desktop-report.json",
"sculpt": {
"faceCount": 5,
"faceSets": [
1,
2,
3,
4,
5
],
"mask": [
0,
0.25,
0.5,
0.75,
1
],
"name": "WBV2P4003SculptObject",
"vertexCount": 5
},
"nonMesh": {
"curve": {
"name": "WBV2P4003Curve",
"pointCount": 3,
"splineCount": 1
},
"pointCloud": {
"name": "WBV2P4003PointCloud",
"pointCount": 3
}
},
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"meshId": "mesh:WBV2P4003SculptMesh",
"curveId": "curve:WBV2P4003Curve",
"pointCloudId": "pointcloud:WBV2P4003PointCloud",
"initialRevision": 1,
"finalRevision": 3,
"sculptStroke": "APPLIED",
"pbvhBrushInventory": 46,
"saveReopen": "EXACT"
},
"negative": {
"unsupportedBrush": "BLOCKED_BEFORE_COMMIT",
"invalidAttributes": "REJECTED_WITHOUT_REVISION_CHANGE",
"pbvhUnavailable": "BLOCKED_STABLE_CODE",
"stalePBVH": "REVISION_CONFLICT",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "WBV2-P4-004"
}

View File

@@ -0,0 +1,180 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-003",
"parentTask": "WBV2-P4-002",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable SCULPT.NONMESH.PAINT_BOUNDED 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": "SCULPT.NONMESH.PAINT_BOUNDED",
"ownerFamily": "SCULPT",
"implementationClass": "LOCAL_BOUNDED"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P4-003.py -- tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend",
"npm --prefix web run test:generated-gap -- --task WBV2-P4-003",
"node tools/web/check-generated-gap.mjs --task WBV2-P4-003"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 41,
"contextRemainingTokens": 8
},
"source": {
"bytes": 9863,
"tokens": 2468
},
"selected": [],
"excluded": [
{
"path": "tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend",
"bytes": 87250,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/generated/WBV2-P4-003.py",
"bytes": 2584,
"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": 986958,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P4-003/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P4-003.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P4-003/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"Main commit is atomic",
"unsupported brush/solver returns stable code",
"GPU/OOM/restart recovery passes"
],
"nextTask": "WBV2-P4-004",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P4-003.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P4-002/manifest.json",
"parentStatus": "docs/status/WBV2-P4-002.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P4-003.md",
"tests/golden/WBV2-P4-002/manifest.json",
"docs/status/WBV2-P4-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-P4-002",
"parentTask": "WBV2-P4-001",
"status": "done",
"nextTask": "WBV2-P4-003",
"artifactCount": 19
},
"statusSummary": [
"# WBV2-P4-002 status",
"- task: `WBV2-P4-002`",
"- parent: `WBV2-P4-001`",
"- parity: `NODES.ALLOWLIST`",
"- implementationClass: `LOCAL_BOUNDED`",
"- status: `done`",
"- fixture: `tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend`",
"## Evidence"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1758,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 440
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2799,
"lines": 51,
"tokens": 700
},
{
"path": "docs/tasks/WBV2-P4-003.md",
"bytes": 1758,
"lines": 38,
"tokens": 440
},
{
"path": "tests/golden/WBV2-P4-002/manifest.json",
"bytes": 3553,
"lines": 41,
"tokens": 889
},
{
"path": "docs/status/WBV2-P4-002.md",
"bytes": 1753,
"lines": 29,
"tokens": 439
}
],
"sourceTokens": 2468,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 2468,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3492,
"serializedContextTokens": 696,
"withinBudget": true
}
}

View File

@@ -0,0 +1,38 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-004",
"parentTask": "WBV2-P4-003",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_WASM_MAIN",
"operation": "SIMULATION_CACHE_IDENTITY_LIFECYCLE_LOCAL_BOUNDED",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/WBV2-P4-003/manifest.json", "sha256": "9c41ef52263d544650b1bad2dc2ec5f40ed63a9ab1b9732492a46672384e1218"},
"fixture": {"path": "tests/files/web/generated/WBV2-P4-004-SIMULATION.CACHE_LIFECYCLE.blend", "sha256": "c7d88d3ea29e8d54872d90078979ba155fa4b04594477136db2fee39e9fccf4f"},
"generator": {"path": "tools/web/generated/WBV2-P4-004.py", "sha256": "6292441ac282354125fd3f160f941429b440df164f67ecea89ef258a2a58dc68"},
"desktopChecker": {"path": "tools/web/check-wbv2-p4-004-desktop.py", "sha256": "21c6d124435558721235dec994939c84c2fb54c90b248a9ee301788a6e5e237f"},
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7c36f36872248226ea6c96c281c49fd7b58af28e5b6d52f6f5ef10e391daedf3"},
"productionMainState": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "3c31a049714860cc89c5b28ebad887a1978df11f8c528c3dfd7836635ed62fb3"},
"productionApi": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", "sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"},
"simulationProtocol": {"path": "web/protocol/simulation-cache.ts", "sha256": "a1302e42129420a96416e363cbc857d082d4646655685520c9e81f877ce3d9b8"},
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "efe1298aab720d0b0d0822c1c33ba93a1496bfff18f786898854ffcc7cfe2788"},
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "2bcaeb4e5a319d5d6276575b1949f84e5c38d8ac40582c7a89021efb29b057c6"},
"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-P4-004/simulation-report.json", "sha256": "ef0575debda0bd76e106a63f9a321f6bd1640cbc84bb7b40e17a4acf360c425a"},
"desktopReport": {"path": "tests/golden/WBV2-P4-004/simulation-desktop-report.json", "sha256": "3b62d0cc13f833140cdee3061b2af01675da29d0aba75012e30e6183e68efcc2"},
"status": {"path": "docs/status/WBV2-P4-004.md", "sha256": "76241a1c4f269e4d8987e08c5bd00deab595cda6dad348238b4adeccf3d45e0a"},
"taskContext": {"path": "tests/golden/WBV2-P4-004/task-context.json", "sha256": "ae4a91c5d676dd655ddb16fbb860afe4171ed4ab24d73ded187b14eea8eaf720"},
"commandLog": {"path": "tests/golden/WBV2-P4-004/command.log", "sha256": "d4e64a063dcb68424b1f07c47e521d88bfba61aa9a57528accbafeeefe22184a"}
},
"negativeMatrix": {
"staleRevision": "CACHE_KEY_CHANGED_AND_NOT_PUBLISHED",
"corruptPayload": "HASH_MISMATCH",
"cancelledVerification": "CANCELLED_WITHOUT_PUBLISH",
"lruProtected": "PROTECTED_AND_BUDGET_SATISFIED",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
"saveReopen": "EXACT"
},
"nextTask": "WBV2-P5-001"
}

View File

@@ -0,0 +1,30 @@
{
"blenderVersion": "5.2.0 LTS",
"fixtureSha256": "c7d88d3ea29e8d54872d90078979ba155fa4b04594477136db2fee39e9fccf4f",
"operation": "SIMULATION_CACHE_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"state": {
"body": {
"angularDamping": 0.10000000149011612,
"friction": 0.3499999940395355,
"linearDamping": 0.03999999910593033,
"mass": 2.5,
"name": "WBV2P4004RigidBody",
"restitution": 0.20000000298023224,
"shape": "BOX",
"type": "ACTIVE"
},
"collision": {
"name": "WBV2P4004Collision",
"shape": "BOX",
"type": "PASSIVE"
},
"frame": [
1,
4,
1
]
},
"task": "WBV2-P4-004"
}

View File

@@ -0,0 +1,32 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-004",
"operation": "SIMULATION_CACHE_IDENTITY_LIFECYCLE_LOCAL_BOUNDED",
"fixture": {
"path": "tests/files/web/generated/WBV2-P4-004-SIMULATION.CACHE_LIFECYCLE.blend",
"sha256": "c7d88d3ea29e8d54872d90078979ba155fa4b04594477136db2fee39e9fccf4f"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/WBV2-P4-004/simulation-desktop-report.json",
"physicsSystems": 2,
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"physicsSystems": 2,
"activeSystemId": "physics:rigid-body:WBV2P4004RigidBody",
"sourceRevision": 1,
"cacheKey": "sim2-74ebf1c8eacf9c7ef388af641302145b09072ea3355d25167252a689ed7acf31",
"frameCount": 2,
"saveReopen": "EXACT"
},
"negative": {
"staleRevision": "CACHE_KEY_CHANGED_AND_NOT_PUBLISHED",
"corruptPayload": "HASH_MISMATCH",
"cancelledVerification": "CANCELLED_WITHOUT_PUBLISH",
"lruProtected": "PROTECTED_AND_BUDGET_SATISFIED",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "WBV2-P5-001"
}

View File

@@ -0,0 +1,180 @@
{
"schemaVersion": 1,
"task": "WBV2-P4-004",
"parentTask": "WBV2-P4-003",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable SIMULATION.CACHE_LIFECYCLE 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": "SIMULATION.CACHE_LIFECYCLE",
"ownerFamily": "SIMULATION",
"implementationClass": "LOCAL_BOUNDED"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P4-004.py -- tests/files/web/generated/WBV2-P4-004-SIMULATION.CACHE_LIFECYCLE.blend",
"npm --prefix web run test:generated-gap -- --task WBV2-P4-004",
"node tools/web/check-generated-gap.mjs --task WBV2-P4-004"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 277,
"contextRemainingTokens": 68
},
"source": {
"bytes": 9627,
"tokens": 2408
},
"selected": [],
"excluded": [
{
"path": "tests/files/web/generated/WBV2-P4-004-SIMULATION.CACHE_LIFECYCLE.blend",
"bytes": 87355,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/generated/WBV2-P4-004.py",
"bytes": 1475,
"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": 994008,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P4-004/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P4-004.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P4-004/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"stale/corrupt cache never publishes",
"small cache recovers after restart",
"budget release is observable"
],
"nextTask": "WBV2-P5-001",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P4-004.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P4-003/manifest.json",
"parentStatus": "docs/status/WBV2-P4-003.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P4-004.md",
"tests/golden/WBV2-P4-003/manifest.json",
"docs/status/WBV2-P4-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-P4-003",
"parentTask": "WBV2-P4-002",
"status": "done",
"nextTask": "WBV2-P4-004",
"artifactCount": 18
},
"statusSummary": [
"# WBV2-P4-003 status",
"- task: `WBV2-P4-003`",
"- parent: `WBV2-P4-002`",
"- parity: `SCULPT.NONMESH.PAINT_BOUNDED`",
"- implementationClass: `LOCAL_BOUNDED`",
"- status: `done`",
"- fixture: `tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend`",
"## Evidence"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1752,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 438
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2799,
"lines": 51,
"tokens": 700
},
{
"path": "docs/tasks/WBV2-P4-004.md",
"bytes": 1752,
"lines": 38,
"tokens": 438
},
{
"path": "tests/golden/WBV2-P4-003/manifest.json",
"bytes": 3397,
"lines": 40,
"tokens": 850
},
{
"path": "docs/status/WBV2-P4-003.md",
"bytes": 1679,
"lines": 29,
"tokens": 420
}
],
"sourceTokens": 2408,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 2408,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3432,
"serializedContextTokens": 695,
"withinBudget": true
}
}

View File

@@ -0,0 +1,38 @@
{
"schemaVersion": 1,
"task": "WBV2-P5-001",
"parentTask": "WBV2-P4-004",
"operation": "RENDER_CAPABILITY_ROUTING_LOCAL_BOUNDED",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/WBV2-P4-004/manifest.json", "sha256": "c6c18a2cf7cfb39fce5718d3e68c7f358329ff8afc2d89d9a6eda7485fd3d016"},
"fixture": {"path": "tests/files/web/generated/WBV2-P5-001-RENDER.ROUTING.blend", "sha256": "c9ae82e6c36d3e31d272c2f5ea268dd45424e3809ae6618c53b5090c91006f7c"},
"generator": {"path": "tools/web/generated/WBV2-P5-001.py", "sha256": "be32df4f252451b35cc05e8232b0ef0599ae4796721d52532300c728dba799b1"},
"desktopChecker": {"path": "tools/web/check-wbv2-p5-001-desktop.py", "sha256": "6c29222f990156baa53d4a9fefc2eb10cdd921f0d2bf616be79d545c56a4b16f"},
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "076551fc1669ae943f8566bee8ea9c608bbb8c0ffb827bb728ae968a061ee5b5"},
"productionMainState": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "sha256": "3c31a049714860cc89c5b28ebad887a1978df11f8c528c3dfd7836635ed62fb3"},
"productionApi": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", "sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"},
"sceneIrProtocol": {"path": "web/protocol/scene-ir.ts", "sha256": "2d4ce6c0cfc0585f395dc134f166b158beb953143e3e08089937d00e57525f26"},
"renderRoutingProtocol": {"path": "web/protocol/render-routing.ts", "sha256": "2d41d48609635c810572aaae95979df2fe9e49bbd130c60d70f64042c5d0f097"},
"renderImageComparisonProtocol": {"path": "web/protocol/render-image-comparison.ts", "sha256": "4345cc0d02b4482201de34292cbf5198009bf615e69c80cc00bc3e76116efec2"},
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "7663db046860f15287de6b19ebda6a9071a10dc05c0303df39f7d3c4ee7fd000"},
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "d39917ad8b29e515a828c7d167b005e6ad6fc2fef602ea76097ddd61beb47ef2"},
"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-P5-001/render-report.json", "sha256": "801c6c93df9cb16205b0489f66d9f3b53447b21db1a99e5fb80b71bd2c184f95"},
"desktopReport": {"path": "tests/golden/WBV2-P5-001/render-desktop-report.json", "sha256": "63ec20b8e2d3a10998d8b074e723abf3f15a10d8032b5e59e8500db667b69638"},
"status": {"path": "docs/status/WBV2-P5-001.md", "sha256": "029749ec9c44bbae00ac2d2a2674ae6c36ffb3dade7fec620afc445e81e8fb97"},
"taskContext": {"path": "tests/golden/WBV2-P5-001/task-context.json", "sha256": "345912968bca514c39558f8b51c8a1aad709be159cbdc225f1b9d8cfbfd7b678"},
"commandLog": {"path": "tests/golden/WBV2-P5-001/command.log", "sha256": "9d033dd21d024190906d78c91a6ef372084ec33fde7e0829131b622996147796"}
},
"negativeMatrix": {
"unsupportedRoute": "BLOCKED_WITHOUT_LOCAL_SUCCESS",
"malformedRoute": "REJECTED_BEFORE_COMMIT",
"pixelMismatch": "RENDER_REFERENCE_MISMATCH",
"cancelledRender": "OPEN_CANCELLED_WITHOUT_PUBLISH",
"deviceLoss": "RELEASED_WITH_ZERO_RESOURCES",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
"saveReopen": "EXACT"
},
"nextTask": "WBV2-P5-002"
}

View File

@@ -0,0 +1,100 @@
{
"blenderVersion": "5.2.0 LTS",
"fixtureSha256": "c9ae82e6c36d3e31d272c2f5ea268dd45424e3809ae6618c53b5090c91006f7c",
"operation": "RENDER_ROUTING_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"state": {
"cameraId": "object:WBV2P5001RenderCamera",
"cubeId": "object:WBV2P5001RenderCube",
"pixelBytes": 16384,
"pixelSha256": "38ad15c4e21d59639ddb001e69a102c3fc37ae89d0aac9122cb3e89e3e95ff76",
"receipt": {
"build": {
"buildSha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c",
"version": "5.2.0"
},
"receiptId": "workflow:render_capability_routing",
"recovery": {
"cancellation": "OPEN_CANCELLED",
"deviceLoss": "RELEASED",
"publishedResults": 0,
"temporaryResourcesAfter": 0
},
"routes": [
{
"capability": "WEB_REALTIME_BOUNDED",
"name": "boundedEevee",
"reason": "BOUNDED_EEVEE",
"status": "READY",
"target": "WEB_LOCAL_BOUNDED"
},
{
"capability": "CYCLES_SERVER_RENDER",
"code": "SERVER_JOB_UNAVAILABLE",
"name": "cycles",
"reason": "CYCLES_REQUIRES_SERVER",
"status": "BLOCKED",
"target": "SERVER_JOB"
},
{
"capability": "COMPLEX_EEVEE_SERVER_RENDER",
"code": "SERVER_JOB_UNAVAILABLE",
"name": "complexEevee",
"reason": "COMPLEX_EEVEE_REQUIRES_SERVER",
"status": "BLOCKED",
"target": "SERVER_JOB"
},
{
"capability": "HARDWARE_SERVER_RENDER",
"code": "SERVER_JOB_UNAVAILABLE",
"name": "hardware",
"reason": "HARDWARE_BACKEND_REQUIRES_SERVER",
"status": "BLOCKED",
"target": "SERVER_JOB"
},
{
"capability": "WEB_REALTIME_BOUNDED",
"code": "WEBGPU_RENDERER_UNAVAILABLE",
"name": "webgpu",
"reason": "WEBGPU_UNAVAILABLE",
"status": "BLOCKED",
"target": "WEB_LOCAL_BOUNDED"
},
{
"capability": "UNSUPPORTED_RENDER_ENGINE",
"code": "PLATFORM_CAPABILITY_UNAVAILABLE",
"name": "unknownEngine",
"reason": "UNSUPPORTED_ENGINE",
"status": "BLOCKED",
"target": "SERVER_JOB"
}
],
"schemaVersion": 1,
"settings": {
"backend": "WEBGL2",
"complexity": "BOUNDED",
"renderEngine": "BLENDER_EEVEE",
"resolutionPercentage": 100,
"resolutionX": 64,
"resolutionY": 64,
"samples": 1,
"sha256": "a1da0f997a25619b2d7b75bb8889603563abe9c6789b270332c5b0de0ff88445"
},
"source": {
"identifier": "WBV2-P5-001-RENDER.ROUTING",
"kind": "blend",
"sha256": "292333a04260417caa9a335f596508cc7e5f8200b8451afb40d0c4773944c687"
}
},
"renderEngine": "BLENDER_EEVEE",
"resolution": [
64,
64,
100
],
"sceneId": "scene:WBV2P5001RenderRoutingScene",
"visiblePixels": 4096
},
"task": "WBV2-P5-001"
}

View File

@@ -0,0 +1,76 @@
{
"schemaVersion": 1,
"task": "WBV2-P5-001",
"operation": "RENDER_CAPABILITY_ROUTING_LOCAL_BOUNDED",
"fixture": {
"path": "tests/files/web/generated/WBV2-P5-001-RENDER.ROUTING.blend",
"sha256": "c9ae82e6c36d3e31d272c2f5ea268dd45424e3809ae6618c53b5090c91006f7c"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/WBV2-P5-001/render-desktop-report.json",
"renderEngine": "BLENDER_EEVEE",
"pixelSha256": "38ad15c4e21d59639ddb001e69a102c3fc37ae89d0aac9122cb3e89e3e95ff76",
"pixelBytes": 16384,
"visiblePixels": 4096,
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"routingStatus": "AVAILABLE_FROM_TEXT_RECEIPT",
"receiptId": "workflow:render_capability_routing",
"buildSha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c",
"routes": [
{
"name": "boundedEevee",
"target": "WEB_LOCAL_BOUNDED",
"status": "READY"
},
{
"name": "cycles",
"target": "SERVER_JOB",
"status": "BLOCKED"
},
{
"name": "complexEevee",
"target": "SERVER_JOB",
"status": "BLOCKED"
},
{
"name": "hardware",
"target": "SERVER_JOB",
"status": "BLOCKED"
},
{
"name": "webgpu",
"target": "WEB_LOCAL_BOUNDED",
"status": "BLOCKED"
},
{
"name": "unknownEngine",
"target": "SERVER_JOB",
"status": "BLOCKED"
}
],
"saveReopen": "EXACT"
},
"pixelGolden": {
"status": "READY",
"width": 2,
"height": 2,
"referenceSha256": "da6e6f3210614dd1485fe35499db63a34f1acdaebce07a0dd91a171123b69bf6",
"mismatch": "RENDER_REFERENCE_MISMATCH"
},
"recovery": {
"cancellation": "OPEN_CANCELLED",
"deviceLoss": "RELEASED",
"temporaryResourcesAfter": 0
},
"negative": {
"unsupportedRoute": "BLOCKED_WITHOUT_LOCAL_SUCCESS",
"malformedRoute": "REJECTED_BEFORE_COMMIT",
"pixelMismatch": "RENDER_REFERENCE_MISMATCH",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "WBV2-P5-002"
}

View File

@@ -0,0 +1,180 @@
{
"schemaVersion": 1,
"task": "WBV2-P5-001",
"parentTask": "WBV2-P4-004",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable RENDER.ROUTING 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": "RENDER.ROUTING",
"ownerFamily": "RENDER",
"implementationClass": "LOCAL_BOUNDED"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P5-001.py -- tests/files/web/generated/WBV2-P5-001-RENDER.ROUTING.blend",
"npm --prefix web run test:generated-gap -- --task WBV2-P5-001",
"node tools/web/check-generated-gap.mjs --task WBV2-P5-001"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 424,
"contextRemainingTokens": 105
},
"source": {
"bytes": 9480,
"tokens": 2371
},
"selected": [],
"excluded": [
{
"path": "tests/files/web/generated/WBV2-P5-001-RENDER.ROUTING.blend",
"bytes": 90527,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/generated/WBV2-P5-001.py",
"bytes": 4870,
"reason": "CONTEXT_REMAINING_SPACE"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 258578,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 1003040,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P5-001/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P5-001.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P5-001/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"source/settings/build identity bound",
"unsupported route cannot pretend local success",
"cancel/device loss releases resources"
],
"nextTask": "WBV2-P5-002",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P5-001.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P4-004/manifest.json",
"parentStatus": "docs/status/WBV2-P4-004.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P5-001.md",
"tests/golden/WBV2-P4-004/manifest.json",
"docs/status/WBV2-P4-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-P4-004",
"parentTask": "WBV2-P4-003",
"status": "done",
"nextTask": "WBV2-P5-001",
"artifactCount": 17
},
"statusSummary": [
"# WBV2-P4-004 status",
"- task: `WBV2-P4-004`",
"- parent: `WBV2-P4-003`",
"- parity: `SIMULATION.CACHE_LIFECYCLE`",
"- implementationClass: `LOCAL_BOUNDED`",
"- status: `done`",
"- fixture: `tests/files/web/generated/WBV2-P4-004-SIMULATION.CACHE_LIFECYCLE.blend`",
"## Evidence"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1688,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 422
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2799,
"lines": 51,
"tokens": 700
},
{
"path": "docs/tasks/WBV2-P5-001.md",
"bytes": 1688,
"lines": 38,
"tokens": 422
},
{
"path": "tests/golden/WBV2-P4-004/manifest.json",
"bytes": 3287,
"lines": 39,
"tokens": 822
},
{
"path": "docs/status/WBV2-P4-004.md",
"bytes": 1706,
"lines": 29,
"tokens": 427
}
],
"sourceTokens": 2371,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 2371,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3395,
"serializedContextTokens": 691,
"withinBudget": true
}
}

View File

@@ -0,0 +1,35 @@
{
"schemaVersion": 1,
"task": "WBV2-P5-002",
"parentTask": "WBV2-P5-001",
"operation": "MEDIA_BOUNDED_WORKFLOW_LOCAL_BOUNDED",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/WBV2-P5-001/manifest.json", "sha256": "b3f1a8b56649d8fa386cbc3f00996e98ce7e4104604731da9af43dea65467d4e"},
"fixture": {"path": "tests/files/web/generated/WBV2-P5-002-MEDIA.BOUNDED_WORKFLOW.blend", "sha256": "3f45837a2cc24aebc2c6f04434cb75d04708c2cf38bbce76bf7a280aad47d8ab"},
"generator": {"path": "tools/web/generated/WBV2-P5-002.py", "sha256": "d2704903d60ac2fd7ebb0fa5702edcab10f2e91f2736cada25e6970886bdc6e7"},
"desktopChecker": {"path": "tools/web/check-wbv2-p5-002-desktop.py", "sha256": "6c0fbfb1eb7fa18f98824c91308fa38df5a219477fb18199f7989eba73822fad"},
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "076551fc1669ae943f8566bee8ea9c608bbb8c0ffb827bb728ae968a061ee5b5"},
"compositorProtocol": {"path": "web/protocol/compositor.ts", "sha256": "3ce4819dadb2d6de7305c3676b2708689cd8be95e6fa7894651d6a02c4658b31"},
"sequencerProtocol": {"path": "web/protocol/sequencer.ts", "sha256": "6e6141ddc0771bfdbcb176929ecc2882e507e07e4f4f7eb610cb0a89f9a74a25"},
"recoveryProtocol": {"path": "web/protocol/render-compositor-media-recovery.ts", "sha256": "a1b0b36cf93173347d55a955ff2e02f3666f7c28ef7f06442b86f0ee2b272286"},
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "d394f600989563c8e25c5914ba362b658f76d8b6ebaab86b82d7d8649640ef7c"},
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "1ddb9d1a1bf4358773adeaccb70a09ba52e09ae09513089597a4265fc6ac9ff4"},
"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-P5-002/media-report.json", "sha256": "90cf9e6eb6f09f2e3e0a25740e5b3e674209efd6f7dbf7fd91a7999ded35e3a0"},
"desktopReport": {"path": "tests/golden/WBV2-P5-002/media-desktop-report.json", "sha256": "7023aef81bea94b1954fbe6eb448ab698d2cca9457b54bac210c70b3b45ec87c"},
"status": {"path": "docs/status/WBV2-P5-002.md", "sha256": "557a6a38f3c43f1684a4880425a6f9cd86ec11378d163be09832dca3466b1e0b"},
"taskContext": {"path": "tests/golden/WBV2-P5-002/task-context.json", "sha256": "feba3ec4bb60ba4a7861cfad74773d189054c3f8404cd9e6859ec7287828db98"},
"commandLog": {"path": "tests/golden/WBV2-P5-002/command.log", "sha256": "0f253f5bbf14e9bd106c954a997bb433e7d52191b65ca15ae7918a85aeda308c"}
},
"negativeMatrix": {
"staleSeek": "REVISION_CONFLICT",
"cancelledCompositor": "COMPOSITOR_CANCELLED",
"codecHashDrift": "SEQUENCER_CODEC_UNSUPPORTED",
"quotaOrBudget": "BLOCKED_WITHOUT_MUTATION",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
"saveReopen": "EXACT"
},
"nextTask": "WBV2-P5-003"
}

View File

@@ -0,0 +1,65 @@
{
"blenderVersion": "5.2.0 LTS",
"fixtureSha256": "3f45837a2cc24aebc2c6f04434cb75d04708c2cf38bbce76bf7a280aad47d8ab",
"operation": "MEDIA_BOUNDED_WORKFLOW_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"state": {
"compositor": {
"links": 3,
"name": "WBV2P5002CompositorTree",
"nodes": [
"WBV2P5002Composite",
"WBV2P5002Constant",
"WBV2P5002Exposure",
"WBV2P5002Invert"
]
},
"sceneId": "scene:WBV2P5002MediaScene",
"sequencer": {
"fps": [
24,
1.0
],
"strips": [
{
"channel": 4,
"frameEnd": 25,
"frameStart": 1,
"mute": true,
"name": "WBV2P5002Cross",
"source": null,
"type": "CROSS"
},
{
"channel": 2,
"frameEnd": 25,
"frameStart": 1,
"mute": false,
"name": "WBV2P5002Image",
"source": "//media/",
"type": "IMAGE"
},
{
"channel": 3,
"frameEnd": 25,
"frameStart": 1,
"mute": false,
"name": "WBV2P5002ImageB",
"source": "//media/",
"type": "IMAGE"
},
{
"channel": 1,
"frameEnd": 25,
"frameStart": 1,
"mute": true,
"name": "WBV2P5002Sound",
"source": "//media/WBV2P5002-silence.wav",
"type": "SOUND"
}
]
}
},
"task": "WBV2-P5-002"
}

View File

@@ -0,0 +1,48 @@
{
"schemaVersion": 1,
"task": "WBV2-P5-002",
"operation": "MEDIA_BOUNDED_WORKFLOW_LOCAL_BOUNDED",
"fixture": {
"path": "tests/files/web/generated/WBV2-P5-002-MEDIA.BOUNDED_WORKFLOW.blend",
"sha256": "3f45837a2cc24aebc2c6f04434cb75d04708c2cf38bbce76bf7a280aad47d8ab"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/WBV2-P5-002/media-desktop-report.json",
"compositorNodes": 4,
"sequencerStrips": 4,
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"compositorStatus": "AVAILABLE",
"sequencerStatus": "AVAILABLE",
"cacheHit": true,
"transition": "CROSS",
"frameInputs": 2,
"saveReopen": "EXACT"
},
"codec": {
"image": "READY",
"sound": "BLOCKED_RUNTIME_UNAVAILABLE",
"sourceHashMismatch": "BLOCKED"
},
"recovery": {
"domains": [
"RENDER",
"COMPOSITOR",
"MEDIA"
],
"cancelled": true,
"budgetBlocked": true,
"restart": "RECOVERED",
"resourcesAfter": 0
},
"negative": {
"staleSeek": "REVISION_CONFLICT",
"cancelledCompositor": "COMPOSITOR_CANCELLED",
"codecHashDrift": "SEQUENCER_CODEC_UNSUPPORTED",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "WBV2-P5-003"
}

View File

@@ -0,0 +1,180 @@
{
"schemaVersion": 1,
"task": "WBV2-P5-002",
"parentTask": "WBV2-P5-001",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable MEDIA.BOUNDED_WORKFLOW 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": "MEDIA.BOUNDED_WORKFLOW",
"ownerFamily": "MEDIA",
"implementationClass": "LOCAL_BOUNDED"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P5-002.py -- tests/files/web/generated/WBV2-P5-002-MEDIA.BOUNDED_WORKFLOW.blend",
"npm --prefix web run test:generated-gap -- --task WBV2-P5-002",
"node tools/web/check-generated-gap.mjs --task WBV2-P5-002"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 145,
"contextRemainingTokens": 35
},
"source": {
"bytes": 9759,
"tokens": 2441
},
"selected": [],
"excluded": [
{
"path": "tests/files/web/generated/WBV2-P5-002-MEDIA.BOUNDED_WORKFLOW.blend",
"bytes": 87897,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/generated/WBV2-P5-002.py",
"bytes": 3216,
"reason": "CONTEXT_REMAINING_SPACE"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 258578,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 1012059,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P5-002/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P5-002.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P5-002/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"seek/decode revision ordering",
"cancel/timeout does not publish",
"quota/OOM/restart leaves project valid"
],
"nextTask": "WBV2-P5-003",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P5-002.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P5-001/manifest.json",
"parentStatus": "docs/status/WBV2-P5-001.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P5-002.md",
"tests/golden/WBV2-P5-001/manifest.json",
"docs/status/WBV2-P5-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-P5-001",
"parentTask": "WBV2-P4-004",
"status": "done",
"nextTask": "WBV2-P5-002",
"artifactCount": 19
},
"statusSummary": [
"# WBV2-P5-001 status",
"- task: `WBV2-P5-001`",
"- parent: `WBV2-P4-004`",
"- parity: `RENDER.ROUTING`",
"- implementationClass: `LOCAL_BOUNDED`",
"- status: `done`",
"- fixture: `tests/files/web/generated/WBV2-P5-001-RENDER.ROUTING.blend`",
"## Evidence"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1727,
"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-P5-002.md",
"bytes": 1727,
"lines": 38,
"tokens": 432
},
{
"path": "tests/golden/WBV2-P5-001/manifest.json",
"bytes": 3524,
"lines": 39,
"tokens": 881
},
{
"path": "docs/status/WBV2-P5-001.md",
"bytes": 1709,
"lines": 30,
"tokens": 428
}
],
"sourceTokens": 2441,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 2441,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3465,
"serializedContextTokens": 691,
"withinBudget": true
}
}

View File

@@ -0,0 +1,40 @@
{
"schemaVersion": 1,
"task": "WBV2-P5-003",
"parentTask": "WBV2-P5-002",
"operation": "SERVER_JOB_RESULT_BINDING_SERVER_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/WBV2-P5-002/manifest.json", "sha256": "70d8fb89a3ddbf02d1128a4efbb76931c17045d7d223aa1e72106366491dbed2"},
"fixture": {"path": "tests/files/web/generated/WBV2-P5-003-SERVER.JOB_BINDING.blend", "sha256": "016164a5d2462c52f0430955f4156535f05cfcb337a3c1ba77968b4db020c410"},
"generator": {"path": "tools/web/generated/WBV2-P5-003.py", "sha256": "77cd88a7f56cc499c93596874ae7a2dd6757fc20e09f7a00ec7838e8490195f1"},
"desktopChecker": {"path": "tools/web/check-wbv2-p5-003-desktop.py", "sha256": "d5423a7b7424fdae37cc374d938f39ed11d8a43fbd38d3a916437c8cfe11858b"},
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "d2554187b26afdedbb502109d123f2e11a97af16fe822762ab4bcb2f87d236d0"},
"sceneIrProtocol": {"path": "web/protocol/scene-ir.ts", "sha256": "b95d3c276a58c4e70ee91017243eeeff0384726e909b69bb8465b2daf0219d7f"},
"serverRenderProtocol": {"path": "web/protocol/server-render-job.ts", "sha256": "e2b5b95032b0dbcb346aa35d1a10a3b55d6c006603f16b9e72c3de45763906c5"},
"idempotency": {"path": "tools/web/server-job-idempotency.mjs", "sha256": "15eca7550964c9985e26a22a7900d3f3aa69fdef35fe5962b48a8f55ebba5863"},
"resultBinding": {"path": "tools/web/server-job-result-binding.mjs", "sha256": "ecf3bddef53e2766dcc055ec027b04c14e3d884132c7fdea476663617364ad86"},
"faultProtocol": {"path": "tools/web/server-job-fault.mjs", "sha256": "858360b4468a7b6cf796fc83a1627ba18626b61a0799f83531de996ea374519b"},
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "f59391c8da9b7d8eef8e414d7e009c896c5bb8e6d450d7ad2593b2b803547cc4"},
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "0bf6ea8a6c066780dec3a4e9f257aa54de99fa44e8eab3c1680260419a41aa93"},
"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-P5-003/server-job-report.json", "sha256": "656546af44238e2b07c44a1f8cccedf996ba639f6cb9ac1c38a4ec30eeafeca3"},
"desktopReport": {"path": "tests/golden/WBV2-P5-003/server-desktop-report.json", "sha256": "34e0108bb5114209c6c4a4f9534a3e7c7955852bd2ccac501e0a2f6943b31e4c"},
"status": {"path": "docs/status/WBV2-P5-003.md", "sha256": "3e4f09e03bdd83e09a3a16f645ad14f1a6f535093d8c1fd9781bcd9168495086"},
"taskContext": {"path": "tests/golden/WBV2-P5-003/task-context.json", "sha256": "51a2fe6c145dcec177addebbe92968ee5ae0999d051367083709b240b22bd315"},
"commandLog": {"path": "tests/golden/WBV2-P5-003/command.log", "sha256": "3cdcf02375467b1cc27ad5a4ceba794d0cec250f53931eec14ba9a4ee9614b1f"}
},
"negativeMatrix": {
"staleResult": "SERVER_RENDER_BINDING_MISMATCH",
"outputHashDrift": "SERVER_RENDER_OUTPUT_HASH_MISMATCH",
"malformedSettings": "SERVER_RENDER_SETTINGS_INVALID",
"duplicateConflict": "SERVER_JOB_IDEMPOTENCY_CONFLICT",
"cancel": "SERVER_JOB_CANCELLED",
"timeout": "SERVER_JOB_TIMEOUT",
"oom": "SERVER_JOB_OOM",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
"saveReopen": "EXACT"
},
"nextTask": "WBV2-P6-001"
}

View File

@@ -0,0 +1,62 @@
{
"blenderVersion": "5.2.0 LTS",
"fixtureSha256": "016164a5d2462c52f0430955f4156535f05cfcb337a3c1ba77968b4db020c410",
"operation": "SERVER_JOB_BINDING_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"state": {
"cubeId": "object:WBV2P5003ServerCube",
"engine": "BLENDER_EEVEE",
"receipt": {
"build": {
"buildSha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c",
"version": "5.2.0"
},
"lifecycle": {
"cancel": "CANCELLED",
"duplicate": "REUSED",
"oom": "OOM",
"publishedOnFailure": false,
"stale": "BLOCKED",
"timeout": "TIMEOUT"
},
"receiptId": "workflow:server_job_result_binding",
"request": {
"jobId": "wbv2-p5-003",
"requestSha256": "caa71d9bcfdc5702adaefc3fe50eca0f48d247e3b9d6de841237f5f2d66fe587",
"sourceRevision": 1
},
"result": {
"outputByteLength": 512,
"outputMime": "image/png",
"outputSha256": "bde194626d489972c73190c41db64e9f12a3056590c757f4e5f62c7e9442ff0e",
"resultSha256": "23028627d452e5270580e7521e95ba88c28c3c6350104dedb174895dfbd41025",
"status": "SUCCEEDED"
},
"schemaVersion": 1,
"settings": {
"frameEnd": 1,
"frameStart": 1,
"outputMime": "image/png",
"renderEngine": "BLENDER_EEVEE",
"resolutionPercentage": 100,
"resolutionX": 32,
"resolutionY": 32,
"samples": 1,
"settingsSha256": "de0473fc528c2d546778b735dce389f8919d4e4ef6e24ec42ec2b30683458bdd",
"transparent": false
},
"source": {
"identifier": "WBV2-P5-003-SERVER.JOB_BINDING",
"kind": "blend",
"sha256": "9ecaa86b3dc1915a991a42d62ef34c0eac013b0faa4cf91ea43991f76722f530"
}
},
"resolution": [
32,
32
],
"sceneId": "scene:WBV2P5003ServerJobScene"
},
"task": "WBV2-P5-003"
}

View File

@@ -0,0 +1,37 @@
{
"schemaVersion": 1,
"task": "WBV2-P5-003",
"operation": "SERVER_JOB_RESULT_BINDING_SERVER_EXACT",
"fixture": {
"path": "tests/files/web/generated/WBV2-P5-003-SERVER.JOB_BINDING.blend",
"sha256": "016164a5d2462c52f0430955f4156535f05cfcb337a3c1ba77968b4db020c410"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/WBV2-P5-003/server-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"bindingStatus": "AVAILABLE_FROM_TEXT_RECEIPT",
"receiptId": "workflow:server_job_result_binding",
"requestSha256": "6bc72c6cd071c52efecb6cfa2e349f74080a7650dd39f48e553a4ccf413d78af",
"resultSha256": "920b687c0a0c8238d2f749a235ea48482bbf72cd627dbb74cae0ae6683fc3639",
"saveReopen": "EXACT"
},
"idempotency": {
"first": "COMMITTED",
"retry": "REUSED",
"conflict": "BLOCKED"
},
"negative": {
"staleResult": "SERVER_RENDER_BINDING_MISMATCH",
"outputHashDrift": "SERVER_RENDER_OUTPUT_HASH_MISMATCH",
"malformedSettings": "SERVER_RENDER_SETTINGS_INVALID",
"cancel": "SERVER_JOB_CANCELLED",
"timeout": "SERVER_JOB_TIMEOUT",
"oom": "SERVER_JOB_OOM",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "WBV2-P6-001"
}

View File

@@ -0,0 +1,180 @@
{
"schemaVersion": 1,
"task": "WBV2-P5-003",
"parentTask": "WBV2-P5-002",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable SERVER.JOB_BINDING 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": "SERVER.JOB_BINDING",
"ownerFamily": "SERVER",
"implementationClass": "SERVER_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P5-003.py -- tests/files/web/generated/WBV2-P5-003-SERVER.JOB_BINDING.blend",
"npm --prefix web run test:generated-gap -- --task WBV2-P5-003",
"node tools/web/check-generated-gap.mjs --task WBV2-P5-003"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 610,
"contextRemainingTokens": 151
},
"source": {
"bytes": 9294,
"tokens": 2325
},
"selected": [],
"excluded": [
{
"path": "tests/files/web/generated/WBV2-P5-003-SERVER.JOB_BINDING.blend",
"bytes": 89446,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/generated/WBV2-P5-003.py",
"bytes": 2741,
"reason": "CONTEXT_REMAINING_SPACE"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 262020,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 1020285,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P5-003/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P5-003.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P5-003/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"duplicate request is idempotent",
"stale result cannot bind",
"timeout/cancel/OOM produces no READY output"
],
"nextTask": "WBV2-P6-001",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P5-003.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P5-002/manifest.json",
"parentStatus": "docs/status/WBV2-P5-002.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P5-003.md",
"tests/golden/WBV2-P5-002/manifest.json",
"docs/status/WBV2-P5-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-P5-002",
"parentTask": "WBV2-P5-001",
"status": "done",
"nextTask": "WBV2-P5-003",
"artifactCount": 17
},
"statusSummary": [
"# WBV2-P5-002 status",
"- task: `WBV2-P5-002`",
"- parent: `WBV2-P5-001`",
"- parity: `MEDIA.BOUNDED_WORKFLOW`",
"- implementationClass: `LOCAL_BOUNDED`",
"- status: `done`",
"- fixture: `tests/files/web/generated/WBV2-P5-002-MEDIA.BOUNDED_WORKFLOW.blend`",
"## Evidence"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1707,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 427
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2799,
"lines": 51,
"tokens": 700
},
{
"path": "docs/tasks/WBV2-P5-003.md",
"bytes": 1707,
"lines": 38,
"tokens": 427
},
{
"path": "tests/golden/WBV2-P5-002/manifest.json",
"bytes": 3093,
"lines": 36,
"tokens": 774
},
{
"path": "docs/status/WBV2-P5-002.md",
"bytes": 1695,
"lines": 30,
"tokens": 424
}
],
"sourceTokens": 2325,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 2325,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3349,
"serializedContextTokens": 688,
"withinBudget": true
}
}

View File

@@ -0,0 +1,39 @@
{
"schemaVersion": 1,
"task": "WBV2-P6-001",
"parentTask": "WBV2-P5-003",
"operation": "SECURITY_SCRIPTING_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/WBV2-P5-003/manifest.json", "sha256": "86fbc8da2b02c1ed595c6d0bdf90f9dd4697def63349c0729edbd9c2bd77a25c"},
"fixture": {"path": "tests/files/web/generated/WBV2-P6-001-SECURITY.SCRIPTING.blend", "sha256": "5d4d5b1e5b6ce564a3d526681d5d6dd1bef0d6ecc79d1cd4449b9fe5083928ec"},
"generator": {"path": "tools/web/generated/WBV2-P6-001.py", "sha256": "4d1c63124c3bc381950eab7efb4b63f0aaf145aaf8b804b6d345d79e33d7d029"},
"desktopChecker": {"path": "tools/web/check-wbv2-p6-001-desktop.py", "sha256": "b8074fc011c8c35f1d5c760c45cf8b96050790ce3dcdf74546ca4d20e95ab784"},
"productionReader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "2510fc525ac61e3b70377a186f62044c985e1500bac6d3e7c453dbc1f12eca26"},
"sceneIrProtocol": {"path": "web/protocol/scene-ir.ts", "sha256": "5989c8f8c8e6f0aaa15aabf302a1e67ea7b3302ca62bf475fe3249dd2f08dd4f"},
"scriptingProtocol": {"path": "web/protocol/scripting-platform.ts", "sha256": "6699fc0a19e0736823f164e707a420655803e36019cf0071f7ff9c760d25e9f2"},
"checker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "00eb478d24508bb384e6864eca54e8440d78f596d0f640ced4092b35add039af"},
"preflight": {"path": "tools/web/generated-gap-preflight.mjs", "sha256": "5c7ea9b7bc7691a2dbd1f53baf7fa6e38860afc9aac5cc6c92d361b4acc831ad"},
"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-P6-001/scripting-report.json", "sha256": "9af7be5ddc2db3893a037294e073487a62c250fb9cb308edcdf0e335f0d66f16"},
"desktopReport": {"path": "tests/golden/WBV2-P6-001/scripting-desktop-report.json", "sha256": "fe575ee718a8745c9be46d0e29d4feb22afae2f7b3bed76d5f2a582cbea3ad6e"},
"status": {"path": "docs/status/WBV2-P6-001.md", "sha256": "b97d1924727b083aec7f5cee6afffb92028732d2afad076c47f8a75be17c5e59"},
"taskContext": {"path": "tests/golden/WBV2-P6-001/task-context.json", "sha256": "4c035136a0100a7cc2a28f5709201669dee570929bdf99ed98294f465f18a227"},
"commandLog": {"path": "tests/golden/WBV2-P6-001/command.log", "sha256": "a07ba8ff5264117909f7b3ee6c8e43eeca2226ebf53c7d5a2fa97a8555aef345"}
},
"negativeMatrix": {
"autorun": "SCRIPT_POLICY_DENIED",
"network": "SCRIPT_POLICY_DENIED",
"addonInstall": "ADDON_INSTALL_BLOCKED",
"driverExpressions": "DRIVER_EXECUTION_BLOCKED",
"unsigned": "SCRIPT_SIGNATURE_INVALID",
"approvedKey": "SCRIPT_SANDBOX_UNAVAILABLE",
"sandboxCancel": "SCRIPT_SANDBOX_CANCELLED",
"lateResult": "SCRIPT_SANDBOX_LATE_RESULT",
"filesystemEscape": "SCRIPT_MANIFEST_INVALID",
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION",
"saveReopen": "EXACT"
},
"nextTask": "WBV2-P6-002"
}

View File

@@ -0,0 +1,57 @@
{
"blenderVersion": "5.2.0 LTS",
"execution": "DISABLED",
"fixtureSha256": "5d4d5b1e5b6ce564a3d526681d5d6dd1bef0d6ecc79d1cd4449b9fe5083928ec",
"operation": "SECURITY_SCRIPTING_DESKTOP_METADATA",
"saveReopen": "EXACT",
"schemaVersion": 1,
"state": {
"receipt": {
"audit": {
"approvedKey": false,
"decision": "DENY",
"reason": "SCRIPT_SIGNATURE_INVALID",
"requestId": "script-audit:WBV2-P6-001"
},
"boundaries": {
"filesystemEscape": "BLOCKED",
"network": "BLOCKED",
"secretAccess": "BLOCKED"
},
"budget": {
"maxAuditEntries": 256,
"maxScripts": 64,
"maxSourceBytes": 1048576
},
"defaults": {
"addonInstall": false,
"autorun": false,
"driverExpressions": false,
"module": false,
"network": false
},
"policyHash": "3b31546795bc2395cc52d91fbb83d3a73163d507194fecf4430775797f55f822",
"policyId": "workflow:scripting_default_deny_audit",
"sandbox": {
"cancellation": "SCRIPT_SANDBOX_CANCELLED",
"dispose": "RELEASED",
"execution": "DISABLED",
"mainRevisionUnchanged": true,
"publishedResults": 0,
"temporaryBytes": 0
},
"schemaVersion": 1,
"scope": {
"dom": false,
"hostWorker": false,
"indexedDB": false,
"network": false,
"opfs": false
}
},
"sceneId": "scene:WBV2P6001ScriptingSecurityScene",
"source": "import os\nimport socket\nopen('../escape.txt', 'w')\nprint('secret-token')",
"useModule": true
},
"task": "WBV2-P6-001"
}

Some files were not shown because too many files have changed in this diff Show More