From 21abcd615a9ba27db3b26fc9d3e0b5eaaaa65e70 Mon Sep 17 00:00:00 2001 From: mes123456 Date: Thu, 3 Sep 2026 18:53:23 +0800 Subject: [PATCH] feat(web): auto-discover line style subtype batch --- .../web_engine/web_engine_blend_reader.cpp | 14 +- docs/status/WBV2-P1160-000.md | 7 + docs/status/WBV2-P1160-001.md | 9 + docs/tasks/WBV2-P1160-000.md | 31 + docs/tasks/WBV2-P1160-001.md | 39 + my-tools/authorize_next_wbv2_task.py | 16 + .../web/line_style_subtype_batch_scene.blend | Bin 0 -> 87057 bytes tests/golden/WBV2-P1160-000/manifest.json | 42 + .../WBV2-P1160-000/module-execution-plan.json | 8182 +++++++++++++++++ .../successor-authorization-report.json | 72 + .../line-style-reader-production.json | 265 + tests/golden/WBV2-P1160-001/manifest.json | 235 + .../golden/WBV2-P1160-001/module-receipt.json | 197 + tests/golden/WBV2-P1160-001/task-context.json | 172 + tests/golden/WBV2/dynamic-coverage-audit.json | 794 +- .../WBV2/dynamic-coverage-bindings.json | 780 ++ .../WBV2/dynamic-coverage-manifest.json | 14 +- .../WBV2/dynamic-inventory-check-report.json | 52 +- .../WBV2/dynamic-inventory-manifest.json | 10 +- tests/golden/WBV2/dynamic-inventory.json | 1642 +++- tools/web/run-wbv2-module-task.mjs | 17 +- 21 files changed, 12513 insertions(+), 77 deletions(-) create mode 100644 docs/status/WBV2-P1160-000.md create mode 100644 docs/status/WBV2-P1160-001.md create mode 100644 docs/tasks/WBV2-P1160-000.md create mode 100644 docs/tasks/WBV2-P1160-001.md create mode 100644 tests/files/web/line_style_subtype_batch_scene.blend create mode 100644 tests/golden/WBV2-P1160-000/manifest.json create mode 100644 tests/golden/WBV2-P1160-000/module-execution-plan.json create mode 100644 tests/golden/WBV2-P1160-000/successor-authorization-report.json create mode 100644 tests/golden/WBV2-P1160-001/line-style-reader-production.json create mode 100644 tests/golden/WBV2-P1160-001/manifest.json create mode 100644 tests/golden/WBV2-P1160-001/module-receipt.json create mode 100644 tests/golden/WBV2-P1160-001/task-context.json diff --git a/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp b/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp index 534260270..074985b4c 100644 --- a/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp +++ b/blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp @@ -4750,6 +4750,13 @@ json scene_ir_from_blend(const ParsedBlend &blend, brushes.push_back(std::move(brush)); } else if (record.type_name == "FreestyleLineStyle") { + auto modifier_type_codes = [&](const char *member) { + json codes = json::array(); + for (const ElementRef &modifier : linked_list_elements(blend, element, member)) { + codes.push_back(read_integer(*blend.sdna, modifier, "type").value_or(-1)); + } + return codes; + }; const std::vector color = {read_float(*blend.sdna, element, "r").value_or(0.0f), read_float(*blend.sdna, element, "g").value_or(0.0f), read_float(*blend.sdna, element, "b").value_or(0.0f)}; @@ -4767,7 +4774,12 @@ json scene_ir_from_blend(const ParsedBlend &blend, {"color", linked_list_elements(blend, element, "color_modifiers").size()}, {"alpha", linked_list_elements(blend, element, "alpha_modifiers").size()}, {"thickness", linked_list_elements(blend, element, "thickness_modifiers").size()}, - {"geometry", linked_list_elements(blend, element, "geometry_modifiers").size()}}} + {"geometry", linked_list_elements(blend, element, "geometry_modifiers").size()}}}, + {"modifierTypeCodes", { + {"color", modifier_type_codes("color_modifiers")}, + {"alpha", modifier_type_codes("alpha_modifiers")}, + {"thickness", modifier_type_codes("thickness_modifiers")}, + {"geometry", modifier_type_codes("geometry_modifiers")}}} }); } else if (record.type_name == "Lattice") { diff --git a/docs/status/WBV2-P1160-000.md b/docs/status/WBV2-P1160-000.md new file mode 100644 index 000000000..b726c6a87 --- /dev/null +++ b/docs/status/WBV2-P1160-000.md @@ -0,0 +1,7 @@ +# WBV2-P1160-000 status + +- task: `WBV2-P1160-000`; parent: `WBV2-P1159-001`; status: `done` +- taskClass: `QUEUE_ENABLEMENT`; no modifier-family parity completion claimed +- source-backed batch authorized: `LINE_STYLE_SUBTYPE_READER_BATCH` (39 units) +- dynamic inventory: `3745` units; verified `478`; unverified `3267`; bound delta `0` +- nextTask: `WBV2-P1160-001` diff --git a/docs/status/WBV2-P1160-001.md b/docs/status/WBV2-P1160-001.md new file mode 100644 index 000000000..f7435e497 --- /dev/null +++ b/docs/status/WBV2-P1160-001.md @@ -0,0 +1,9 @@ +# WBV2-P1160-001 status + +- task: `WBV2-P1160-001`; module: `LINE_STYLE_SUBTYPE_READER_BATCH`; status: `done` +- source hashes stable: `true`; commands passed: `4` +- existing production evidence reused: `true`; skipped commands: `4` +- positive Main mutation, negative no-mutation, recovery and Chromium gates are recorded in the module receipt +- dynamic source inventory: `3745` units; verified `517`; unverified `3228`; planning estimate `5200` (non-binding); this-segment binding delta: `39` +- historical 6900-entry inventory remains read-only; full-family parity: `false` +- nextTask: `NONE` diff --git a/docs/tasks/WBV2-P1160-000.md b/docs/tasks/WBV2-P1160-000.md new file mode 100644 index 000000000..6033d00b9 --- /dev/null +++ b/docs/tasks/WBV2-P1160-000.md @@ -0,0 +1,31 @@ +# WBV2-P1160-000: authorize module batch + +- task: WBV2-P1160-000 +- parent: WBV2-P1159-001 +- status: done +- gap: capability:LINE_STYLE_SUBTYPE_READER_BATCH +- ownerFamily: DRAWING +- targetImplementationClass: QUEUE_ONLY +- Implementation entrypoint: `python3 my-tools/authorize_next_wbv2_task.py --write` + +## 目标 + +授权一个共享 Blender Main/WASM/Chromium 功能批次:LINE_STYLE_SUBTYPE_READER_BATCH,共 39 个源码/RNA 单元。 + +## 输入与范围 + +- Blender source: `blender-5.2.0/source/blender` +- Fixtures/test: `tests/files/web/line_style_subtype_batch_scene.blend`, `web/tests/e2e/wbv2-line-style-reader-production.spec.ts` + +## 验收 + +- prior evidence and dynamic inventory remain hash-bound and immutable +- one shared function chain validates the complete selected batch +- missing source, unsupported data, hash drift or false completion remains blocked +- `node tools/web/check-task-context.mjs --task WBV2-P1160-000 --write` + +## 交付与回滚 + +- Manifest: `tests/golden/WBV2-P1160-000/manifest.json` +- Status: `docs/status/WBV2-P1160-000.md` +- Rollback: restore WBV2-P1159-001 as queue parent. diff --git a/docs/tasks/WBV2-P1160-001.md b/docs/tasks/WBV2-P1160-001.md new file mode 100644 index 000000000..d5b6f39bf --- /dev/null +++ b/docs/tasks/WBV2-P1160-001.md @@ -0,0 +1,39 @@ +# WBV2-P1160-001: verify line style modifier subtype reader batch + +- task: WBV2-P1160-001 +- parent: WBV2-P1160-000 +- status: done +- gap: capability:LINE_STYLE_SUBTYPE_READER_BATCH +- ownerFamily: DRAWING +- targetImplementationClass: LOCAL_EXACT +- Implementation entrypoint: `node tools/web/run-wbv2-module-task.mjs --task WBV2-P1160-001 --write` + +## 目标 + +使用一个共享 Blender Main/WASM/Worker/Chromium 链验证 0 个 modifier source 与 39 个 RNA unit,形成一个聚合 receipt。 + +## 输入与范围 + +- Blender source family: `blender-5.2.0/source/blender` +- Fixtures: `tests/files/web/line_style_subtype_batch_scene.blend` +- Chromium test: `web/tests/e2e/wbv2-line-style-reader-production.spec.ts` +- Unit selection: `39 units`(完整列表只在 module plan/manifest) + +## 验收 + +- one shared function chain covers every selected unit exactly once +- malformed input, unsupported data and hash drift fail closed without Main mutation +- save/reopen, deterministic second read and Chromium evidence are exact +- `node tools/web/check-task-context.mjs --task WBV2-P1160-001 --write` + +## 失败边界 + +- partial batch success never advances or claims omitted units +- existing source/receipt hashes are reused; historical inventory remains read-only + +## 交付与回滚 + +- Aggregate receipt: `tests/golden/WBV2-P1160-001/module-receipt.json` +- Production evidence: `tests/golden/WBV2-P1160-001/modifier-reader-batch-production.json` +- Manifest: `tests/golden/WBV2-P1160-001/manifest.json` +- Rollback: restore WBV2-P1160-000 as queue parent. diff --git a/my-tools/authorize_next_wbv2_task.py b/my-tools/authorize_next_wbv2_task.py index 73a4a53e5..0e1ec8e2d 100644 --- a/my-tools/authorize_next_wbv2_task.py +++ b/my-tools/authorize_next_wbv2_task.py @@ -152,6 +152,22 @@ PREFERRED_BATCHES = [ "production": "tests/golden/{task}/line-style-reader-production.json", "types": [], }, + { + "moduleId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "title": "verify line style modifier subtype reader batch", + "owner": "DRAWING", + "identifiers": [], + "rna": [ + "LineStyleAlphaModifier_AlongStroke", "LineStyleAlphaModifier_CreaseAngle", "LineStyleAlphaModifier_Curvature_3D", "LineStyleAlphaModifier_DistanceFromCamera", "LineStyleAlphaModifier_DistanceFromObject", "LineStyleAlphaModifier_Material", "LineStyleAlphaModifier_Noise", "LineStyleAlphaModifier_Tangent", + "LineStyleColorModifier_AlongStroke", "LineStyleColorModifier_CreaseAngle", "LineStyleColorModifier_Curvature_3D", "LineStyleColorModifier_DistanceFromCamera", "LineStyleColorModifier_DistanceFromObject", "LineStyleColorModifier_Material", "LineStyleColorModifier_Noise", "LineStyleColorModifier_Tangent", + "LineStyleGeometryModifier_2DOffset", "LineStyleGeometryModifier_2DTransform", "LineStyleGeometryModifier_BackboneStretcher", "LineStyleGeometryModifier_BezierCurve", "LineStyleGeometryModifier_Blueprint", "LineStyleGeometryModifier_GuidingLines", "LineStyleGeometryModifier_PerlinNoise1D", "LineStyleGeometryModifier_PerlinNoise2D", "LineStyleGeometryModifier_Polygonalization", "LineStyleGeometryModifier_Sampling", "LineStyleGeometryModifier_Simplification", "LineStyleGeometryModifier_SinusDisplacement", "LineStyleGeometryModifier_SpatialNoise", "LineStyleGeometryModifier_TipRemover", + "LineStyleThicknessModifier_AlongStroke", "LineStyleThicknessModifier_Calligraphy", "LineStyleThicknessModifier_CreaseAngle", "LineStyleThicknessModifier_Curvature_3D", "LineStyleThicknessModifier_DistanceFromCamera", "LineStyleThicknessModifier_DistanceFromObject", "LineStyleThicknessModifier_Material", "LineStyleThicknessModifier_Noise", "LineStyleThicknessModifier_Tangent", + ], + "fixture": "tests/files/web/line_style_subtype_batch_scene.blend", + "test": "web/tests/e2e/wbv2-line-style-reader-production.spec.ts", + "production": "tests/golden/{task}/line-style-reader-production.json", + "types": [], + }, { "moduleId": "MODIFIER_SOURCE_DEPENDENCY_REUSE", "title": "reuse verified modifier receipts for shared source utilities", diff --git a/tests/files/web/line_style_subtype_batch_scene.blend b/tests/files/web/line_style_subtype_batch_scene.blend new file mode 100644 index 0000000000000000000000000000000000000000..65fe702e5a377c0b1f25448f2d9f96e78be3d38f GIT binary patch literal 87057 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

P9tY>nF z&M+5IREZllky&#~5h7$5$GnSA=ORNp_Mb01~qBOahb_U>{6QtA#u z|4l?ZoqYRh%(vKK(LAG=o1y9n(f+r1xYT@Kb3)Ej`*Ey)s;s`J>bDgJ=?^($Ccz&A zuT1tuZsY5c+waOzdJOJf;bw8HNf_)PLqh)+?j9RrEn%d9a}$ay%la458abi;&}P|& zPMWA;ZkI5%LK;3z$&3HrMQu`w!k$o_INutNZG=nKrc8WOGFK`pt0Hg~v-!JmmB;i< z5Wnuu8!<@sL}Z>-ySJ;@JK(>wmNOnl5uSclUcd&qy&^hw=nVpnzt?l6R_;aiS4fjy zDluqysEmFFh8Ic35xV1h3HQI4elldRE+FY+w)ipGd-i*DhS^Mdzdy#sC{ zFgSbZFD7h&<6@Efiy(4movK*#h#!(%Ke?<2IKiz!0Indc3()_TpT}`&NUvt=ajfKQX#~8Z4DUTnA zw_y;z50p&nxtsqXM&s{vzZJ%0>b*MLw_hOio>CVTx?Z~>KX9Xs{_|7s|D^@7?1sF& zVf$MA$5wOLsTb~%want)h6BBhU4-NSIe&b+Iv%^>r`y*$5w?&Bd)DBJKSKlYuzE)Q z_D-!~)(&Jnvy21|AeZCsrz(ERV|t+Kk*4fen(qS{9S(eMTUyV6MTW2xn9lGpdy&k_ zOL24lqE@lZ>obT3)#hjRH`-j+t^-eMZ#(im80c*bU;X2BJLOQW|JhAd@j+axdo|_r z8=sGL9JP%mSmJ{?zlrmLZXV{Tl@T~0tozVl(kMlB=Iv`ZKbZMZ-3$24z-$F+`d7tM z9ceY*q#QJqiIWK~{eb#LMq%S%wMW-^&LcaIXH5R1JceTaKK!lh8*~nRHXfV4KS!o6 zJR)d|`r3~ja(>lj{}p_PAEt-&FldS2T!!MPJ+d?-yzbKB7I`hBsrE*F&g*webinI; zk@9Ce>c(NI$s?)HOzXkdc=CWrthsKnw~Jz;wR`?AFBJp zBo4`kc*X->o%+%OKJ`ZO>A<=*!Tb!59^a0h8(?A4Q8KRBPUI=HZuMzs=Dj_Ywq@gG zjC%9`Fmuc`KKqCKP1SzcZPRC6{hm+Ye|!m0hj2~Gb})o) z;{KiVbE@f1S@t`@cpWaVT@txvUlYu+2kcnz)!{D>?4PT%{fD0)nv>I}8d=NvK+g=( z9J0s5#a8zjJ_D6Ci$&50q9V`r(Z%3%JKGZ@V=oO>Mtpr17`r3c&2%#N+6&*@#oROM zM%Z-!YuXu~a>YG*HVG+*XTEXg*ty`L?KE%BeU&&(Qy&1?~a7-IDD= z>MfF~FzDgBPA>%L+0eC`XN1oY-{Vn06HHpiWP01#E|lXzKM}^AVx{3w+fC^C6moJN z?}>c06D)Zzy3bR3X7l)ZwLEFAU>s!ldrZ4W>c0@m5tn~ZujwLQpBsQfw>muN&hkXP z59k}DpQ`G}B)fb+ek_D(YIYp%w!?oRUgE45c##`HgWpI}-14l+1Ij@G`+)<6-v#1a zd4%gfx;Wo+e896HaIGP5FvQ(5;ds=34@Mka1`!U2=*B>he!}-+30UkFQ8Rd=P zfSc4(KN^&o&M00UHfOeJu^Xc8==^-f78dz8<-=3(6-Si!d>D)mulxEx=DbHl&z2(p z2zak+fgo}3|Jo|?+9lD*t!sAZHg=!nKg^7|w?@cG~VMV_2i7?zO>DQu&nEmo(We8#C^4A

K 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 literal 0 HcmV?d00001 diff --git a/tests/golden/WBV2-P1160-000/manifest.json b/tests/golden/WBV2-P1160-000/manifest.json new file mode 100644 index 000000000..86f0f5e2d --- /dev/null +++ b/tests/golden/WBV2-P1160-000/manifest.json @@ -0,0 +1,42 @@ +{ + "schemaVersion": 1, + "task": "WBV2-P1160-000", + "parentTask": "WBV2-P1159-001", + "operation": "AUTHORIZE_SOURCE_BACKED_MODULE_BATCH", + "status": "done", + "enablingTask": true, + "parityStateChange": false, + "runtime": "MODULE_EXECUTION_QUEUE_BRIDGE", + "artifacts": { + "parentManifest": { + "path": "tests/golden/WBV2-P1159-001/manifest.json", + "sha256": "7805c6aebb18f4766a0e176762385e592698ff39847a344e1c9f463db0f50c83" + }, + "plan": { + "path": "tests/golden/WBV2-P1160-000/module-execution-plan.json", + "sha256": "4aecefb31d489898c6794e0c12e6f15b9df53517aa63292271bc013a92df2ec5" + }, + "report": { + "path": "tests/golden/WBV2-P1160-000/successor-authorization-report.json", + "sha256": "8a548281531cf28be4c395ceb9a22df1ac892894b6057cf5c6d57f2f79bf2de5" + }, + "status": { + "path": "docs/status/WBV2-P1160-000.md", + "sha256": "0a4e8e894990c644982f6430c0c0316603631e6de420fe830226a0a2bbe0bfa7" + } + }, + "assertions": { + "sourceBackedSuccessor": true, + "moduleId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "batchSize": 39, + "inventoryTotal": 6900, + "effectiveCompleted": 290, + "effectivePending": 6609, + "dynamicUnitCount": 3745, + "dynamicVerifiedUnits": 478, + "dynamicUnverifiedUnits": 3267, + "boundUnitDelta": 0, + "fullHistoricalReproduction": false + }, + "nextTask": "WBV2-P1160-001" +} diff --git a/tests/golden/WBV2-P1160-000/module-execution-plan.json b/tests/golden/WBV2-P1160-000/module-execution-plan.json new file mode 100644 index 000000000..b52dc7db7 --- /dev/null +++ b/tests/golden/WBV2-P1160-000/module-execution-plan.json @@ -0,0 +1,8182 @@ +{ + "schemaVersion": 1, + "planId": "BLENDER_WEB_MODULE_EXECUTION_P1160", + "operation": "FUNCTION_MODULE_MIGRATION_PLAN", + "status": "COMPLETED_MODULE_EXECUTION", + "authority": "blender_main_source_and_existing_hash_bound_receipts", + "executionPointer": "docs/EXECUTION_QUEUE.md", + "inventory": { + "path": "tests/golden/WBV2-P0-002/parity-map.json", + "sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8", + "total": 6900, + "legacyCompleted": 281, + "legacyPending": 6618, + "effectiveCompleted": 290, + "effectivePending": 6609, + "mutation": "forbidden_by_module_execution" + }, + "reusePolicy": { + "completedReceipts": "reuse_without_rerun", + "continuationEvidence": "excluded", + "duplicateValidation": "forbidden", + "fullFamilyParity": "never_inferred" + }, + "verificationPolicy": { + "browser": "chromium_only", + "required": [ + "sourceHash", + "wasmBuild", + "positiveMainMutation", + "negativeNoMutation", + "undoRedo", + "saveReopen", + "aggregateManifest" + ], + "failure": "keep_module_in_progress_and_do_not_advance" + }, + "modules": [ + { + "id": "RENDER_LIGHT_CAMERA", + "task": "WBV2-P1100-001", + "owner": "RENDER", + "sourceBacked": true, + "capabilities": [ + "CAP-RENDER-LIGHT-TYPE", + "CAP-RENDER-LIGHT-AREA-SHAPE", + "CAP-RENDER-LIGHT-CONTRIBUTION-FACTORS", + "CAP-RENDER-LIGHT-SHADOW-CONTROLS", + "CAP-RENDER-LIGHT-CASCADE-CONTROLS", + "CAP-RENDER-LIGHT-AREA-SIZE-Z", + "CAP-RENDER-LIGHT-CLIP-START", + "CAP-RENDER-WORLD-LIGHTING-CONTROLS", + "CAP-RENDER-WORLD-PROBE-CONTROLS", + "CAP-RENDER-WORLD-ENVIRONMENT-STRENGTH", + "CAP-RENDER-CAMERA-DOF-FOCUS-OBJECT", + "CAP-RENDER-CAMERA-PANORAMA" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P595-002/manifest.json", + "report": "tests/golden/WBV2-P595-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P596-002/manifest.json", + "report": "tests/golden/WBV2-P596-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P597-002/manifest.json", + "report": "tests/golden/WBV2-P597-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P598-002/manifest.json", + "report": "tests/golden/WBV2-P598-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P599-002/manifest.json", + "report": "tests/golden/WBV2-P599-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P600-002/manifest.json", + "report": "tests/golden/WBV2-P600-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P601-002/manifest.json", + "report": "tests/golden/WBV2-P601-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P602-002/manifest.json", + "report": "tests/golden/WBV2-P602-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P603-002/manifest.json", + "report": "tests/golden/WBV2-P603-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P604-002/manifest.json", + "report": "tests/golden/WBV2-P604-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P605-002/manifest.json", + "report": "tests/golden/WBV2-P605-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P606-002/manifest.json", + "report": "tests/golden/WBV2-P606-002/implementation-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "SCENE_OBJECT_MESH", + "task": "WBV2-P1100-002", + "owner": "SCENE_MESH", + "sourceBacked": true, + "capabilities": [ + "CAP-MESH-TOPOLOGY-FAMILY", + "CAP-CORE-SCENE-OBJECT", + "CAP-OBJECT-MOVE-COLLECTION" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P11-001/manifest.json", + "report": "tests/golden/WBV2-P11-001/mesh-topology-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P12-002/manifest.json", + "report": "tests/golden/WBV2-P12-002/scene-object-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P24-002/manifest.json", + "report": "tests/golden/WBV2-P24-002/object-move-receipt-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MATERIAL_ANIMATION", + "task": "WBV2-P1100-003", + "owner": "MATERIAL_ANIMATION", + "sourceBacked": true, + "capabilities": [ + "CAP-MATERIAL-ANIMATION" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P12-003/manifest.json", + "report": "tests/golden/WBV2-P12-003/material-animation-receipt-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "NONMESH_GEOMETRY", + "task": "WBV2-P1101-000", + "owner": "GEOMETRY", + "sourceBacked": true, + "capabilities": [ + "CAP-VIEWPORT-NONMESH", + "CAP-NATIVE-DATABLOCK" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P12-004/manifest.json", + "report": "tests/golden/WBV2-P12-004/viewport-nonmesh-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P29-003/manifest.json", + "report": "tests/golden/WBV2-P29-003/implementation-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "NODES_SIMULATION", + "task": "WBV2-P1101-001", + "owner": "NODES_SIMULATION", + "sourceBacked": true, + "capabilities": [ + "CAP-GEOMETRY-NODES", + "CAP-SIMULATION" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P13-002/manifest.json", + "report": "tests/golden/WBV2-P13-002/geometry-nodes-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P13-004/manifest.json", + "report": "tests/golden/WBV2-P13-004/advanced-domain-receipt-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "ASSET_IO", + "task": "WBV2-P1101-002", + "owner": "ASSET", + "sourceBacked": true, + "capabilities": [ + "CAP-ASSET-LINK-OVERRIDE-RELOAD", + "CAP-ASSET-CATALOG-MUTATION" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P11-003/manifest.json", + "report": "tests/golden/WBV2-P11-003/asset-link-override-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P10-003/manifest.json", + "report": "tests/golden/WBV2-P10-003/module-matrix-receipt-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "SCULPT_PAINT", + "task": "WBV2-P1101-003", + "owner": "SCULPT_PAINT", + "sourceBacked": true, + "capabilities": [ + "CAP-PAINT-ATTRIBUTES", + "CAP-SCULPT-PAINT" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P16-002/manifest.json", + "report": "tests/golden/WBV2-P16-002/paint-attributes-receipt-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "UI_EDITOR", + "task": "WBV2-P1102-000", + "owner": "EDITOR", + "sourceBacked": true, + "capabilities": [ + "CAP-UI-EDITOR" + ], + "reusedReceipts": [], + "fullFamilyParity": false + }, + { + "id": "INVENTORY_GATE", + "task": "WBV2-P1102-001", + "owner": "RELEASE", + "sourceBacked": true, + "capabilities": [], + "reusedReceipts": [], + "fullFamilyParity": false + }, + { + "id": "OBJECT_OPERATIONS", + "task": "WBV2-P1103-000", + "owner": "OBJECT", + "sourceBacked": true, + "capabilities": [ + "CAP-OBJECT-DUPLICATE", + "CAP-OBJECT-CREATE", + "CAP-OBJECT-PARENT", + "CAP-OBJECT-COLLECTION", + "CAP-OBJECT-RENAME", + "CAP-OBJECT-DELETE", + "CAP-OBJECT-TRANSFORM" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P17-002/manifest.json", + "report": "tests/golden/WBV2-P17-002/object-duplicate-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P18-002/manifest.json", + "report": "tests/golden/WBV2-P18-002/object-create-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P19-002/manifest.json", + "report": "tests/golden/WBV2-P19-002/object-parent-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P20-002/manifest.json", + "report": "tests/golden/WBV2-P20-002/collection-create-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P21-002/manifest.json", + "report": "tests/golden/WBV2-P21-002/object-rename-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P22-002/manifest.json", + "report": "tests/golden/WBV2-P22-002/object-delete-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P23-002/manifest.json", + "report": "tests/golden/WBV2-P23-002/object-transform-receipt-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "COMPOSITOR_SEQUENCER", + "task": "WBV2-P1104-000", + "owner": "MEDIA", + "sourceBacked": true, + "capabilities": [ + "CAP-COMPOSITOR-NODE-GRAPH", + "CAP-COMPOSITOR-UNSUPPORTED-GATE", + "CAP-SEQUENCER-MEDIA-RECOVERY" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P29-003/manifest.json", + "report": "tests/golden/WBV2-P29-003/implementation-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "AUDIO_PARTICLE", + "task": "WBV2-P1105-000", + "owner": "AUDIO_PARTICLE", + "sourceBacked": true, + "capabilities": [ + "CAP-SOUND-PROPERTIES", + "CAP-SPEAKER-PROPERTIES", + "CAP-PARTICLE-SETTINGS" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P33-001/manifest.json", + "report": "tests/golden/WBV2-P33-001/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P33-002/manifest.json", + "report": "tests/golden/WBV2-P33-002/implementation-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "RIG_ANIMATION", + "task": "WBV2-P1106-000", + "owner": "RIG", + "sourceBacked": true, + "capabilities": [ + "CAP-RIG-POSE", + "CAP-CONSTRAINTS", + "CAP-NLA-ANIMATION" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P13-003/manifest.json", + "report": "tests/golden/WBV2-P13-003/rig-pose-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P13-004/manifest.json", + "report": "tests/golden/WBV2-P13-004/advanced-domain-receipt-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "CORE_SCENE_GRAPH_SETTINGS", + "task": "WBV2-P1129-001", + "owner": "CORE_SCENE", + "sourceBacked": true, + "capabilities": [ + "CAP-SCENE-COMPOSITOR-SETTINGS", + "CAP-SCENE-PERFORMANCE-SETTINGS", + "CAP-SCENE-SAMPLING-SETTINGS" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P65-002/manifest.json", + "report": "tests/golden/WBV2-P65-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P66-002/manifest.json", + "report": "tests/golden/WBV2-P66-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P67-002/manifest.json", + "report": "tests/golden/WBV2-P67-002/implementation-report.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "UI_EDITOR_VIEW2D_STATE", + "task": "WBV2-P1130-001", + "owner": "EDITOR", + "sourceBacked": true, + "capabilities": [ + "CAP-EDITOR-VIEW2D-CUR", + "CAP-EDITOR-VIEW2D-MASK", + "CAP-EDITOR-VIEW2D-FAIL-CLOSED" + ], + "reusedReceipts": [], + "fullFamilyParity": false + }, + { + "id": "CURVE_TOPOLOGY_EDITOR", + "task": "WBV2-P1131-001", + "owner": "EDITOR", + "sourceBacked": true, + "capabilities": [ + "CAP-CURVE-TOPOLOGY-TOGGLE-CYCLIC", + "CAP-CURVE-TOPOLOGY-GATE", + "CAP-CURVE-TOPOLOGY-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/M9-05/manifest.json", + "report": "tests/golden/M9-05/curve-toggle-cyclic.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "CURVE_HANDLE_GIZMO", + "task": "WBV2-P1132-001", + "owner": "EDITOR", + "sourceBacked": true, + "capabilities": [ + "CAP-CURVE-HANDLE-MAIN", + "CAP-CURVE-HANDLE-GIZMO-PREVIEW", + "CAP-CURVE-HANDLE-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "CURVE_SPLINES_TRANSACTION", + "task": "WBV2-P1133-001", + "owner": "EDITOR", + "sourceBacked": true, + "capabilities": [ + "CAP-CURVE-SPLINES-MAIN", + "CAP-CURVE-SPLINES-RECOVERY", + "CAP-CURVE-SPLINES-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "SURFACE_TOPOLOGY_TRANSACTION", + "task": "WBV2-P1134-001", + "owner": "GEOMETRY", + "sourceBacked": true, + "capabilities": [ + "CAP-SURFACE-TOPOLOGY-MAIN", + "CAP-SURFACE-NURBS-BOUNDS", + "CAP-SURFACE-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "FONT_BODY_TRANSACTION", + "task": "WBV2-P1135-001", + "owner": "GEOMETRY", + "sourceBacked": true, + "capabilities": [ + "CAP-FONT-BODY-MAIN", + "CAP-FONT-BODY-RECOVERY", + "CAP-FONT-BODY-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "FONT_PROPERTIES_TRANSACTION", + "task": "WBV2-P1136-001", + "owner": "GEOMETRY", + "sourceBacked": true, + "capabilities": [ + "CAP-FONT-PROPERTIES-MAIN", + "CAP-FONT-PROPERTIES-RECOVERY", + "CAP-FONT-PROPERTIES-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "METABALL_ELEMENTS_TRANSACTION", + "task": "WBV2-P1137-001", + "owner": "GEOMETRY", + "sourceBacked": true, + "capabilities": [ + "CAP-METABALL-ELEMENTS-MAIN", + "CAP-METABALL-ELEMENTS-RECOVERY", + "CAP-METABALL-ELEMENTS-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "TEXT_SOURCE_TRANSACTION", + "task": "WBV2-P1138-001", + "owner": "SCRIPTING", + "sourceBacked": true, + "capabilities": [ + "CAP-TEXT-SOURCE-MAIN", + "CAP-TEXT-SOURCE-RECOVERY", + "CAP-TEXT-SOURCE-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1137-001/manifest.json", + "report": "tests/golden/WBV2-P1137-001/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "TEXTURE_PROPERTIES_TRANSACTION", + "task": "WBV2-P1139-001", + "owner": "TEXTURE", + "sourceBacked": true, + "capabilities": [ + "CAP-TEXTURE-PROPERTIES-MAIN", + "CAP-TEXTURE-PROPERTIES-RECOVERY", + "CAP-TEXTURE-PROPERTIES-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1138-001/manifest.json", + "report": "tests/golden/WBV2-P1138-001/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "ACTION_GROUP_READER", + "task": "WBV2-P1140-001", + "owner": "ANIMATION", + "sourceBacked": true, + "capabilities": [ + "CAP-ACTION-GROUP-READER", + "CAP-ACTION-GROUP-RECOVERY", + "CAP-ACTION-GROUP-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1112-000/manifest.json", + "report": "tests/golden/WBV2-P1112-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "ACTION_POSE_MARKERS_READER", + "task": "WBV2-P1141-001", + "owner": "ANIMATION", + "sourceBacked": true, + "capabilities": [ + "CAP-ACTION-POSE-MARKERS-READER", + "CAP-ACTION-POSE-MARKERS-RECOVERY", + "CAP-ACTION-POSE-MARKERS-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1140-001/manifest.json", + "report": "tests/golden/WBV2-P1140-001/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "FCURVE_SAMPLE_READER", + "task": "WBV2-P1142-001", + "owner": "ANIMATION", + "sourceBacked": true, + "capabilities": [ + "CAP-FCURVE-SAMPLE-READER", + "CAP-FCURVE-SAMPLE-RECOVERY", + "CAP-FCURVE-SAMPLE-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1141-001/manifest.json", + "report": "tests/golden/WBV2-P1141-001/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "FCURVE_MODIFIER_READER", + "task": "WBV2-P1143-001", + "owner": "ANIMATION", + "sourceBacked": true, + "capabilities": [ + "CAP-FCURVE-MODIFIER-READER", + "CAP-FCURVE-MODIFIER-RECOVERY", + "CAP-FCURVE-MODIFIER-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1142-001/manifest.json", + "report": "tests/golden/WBV2-P1142-001/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "DRIVER_READER", + "task": "WBV2-P1144-001", + "owner": "ANIMATION", + "sourceBacked": true, + "capabilities": [ + "CAP-DRIVER-READER", + "CAP-DRIVER-RECOVERY", + "CAP-DRIVER-FAIL-CLOSED" + ], + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1143-001/manifest.json", + "report": "tests/golden/WBV2-P1143-001/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "CORRECTIVE_SMOOTH_READER", + "task": "WBV2-P1145-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-CORRECTIVE-SMOOTH-READER", + "CAP-CORRECTIVE-SMOOTH-RECOVERY", + "CAP-CORRECTIVE-SMOOTH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_correctivesmooth.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-corrective-smooth-reader-production.spec.ts", + "tests/files/web/modifier_corrective_smooth_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MODIFIER_READER_BATCH", + "task": "WBV2-P1146-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH-READER", + "CAP-MODIFIER_READER_BATCH-RECOVERY", + "CAP-MODIFIER_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_datatransfer.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_dynamicpaint.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_explode.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_fluid.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_fluid.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-production.spec.ts", + "tests/files/web/modifier_reader_batch_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MODIFIER_READER_BATCH_TWO", + "task": "WBV2-P1147-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH_TWO-READER", + "CAP-MODIFIER_READER_BATCH_TWO-RECOVERY", + "CAP-MODIFIER_READER_BATCH_TWO-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_laplaciandeform.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_laplaciansmooth.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_mask.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_shrinkwrap.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts", + "tests/files/web/modifier_reader_batch_two_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MODIFIER_READER_BATCH_THREE", + "task": "WBV2-P1148-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH_THREE-READER", + "CAP-MODIFIER_READER_BATCH_THREE-RECOVERY", + "CAP-MODIFIER_READER_BATCH_THREE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_remesh.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_skin.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weighted_normal.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_warp.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts", + "tests/files/web/modifier_reader_batch_three_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MODIFIER_READER_BATCH_FOUR", + "task": "WBV2-P1149-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH_FOUR-READER", + "CAP-MODIFIER_READER_BATCH_FOUR-RECOVERY", + "CAP-MODIFIER_READER_BATCH_FOUR-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_uvproject.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_uvwarp.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_normal_edit.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_volume_to_mesh.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts", + "tests/files/web/modifier_reader_batch_four_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MODIFIER_READER_BATCH_FIVE", + "task": "WBV2-P1150-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH_FIVE-READER", + "CAP-MODIFIER_READER_BATCH_FIVE-RECOVERY", + "CAP-MODIFIER_READER_BATCH_FIVE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshsequencecache.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_multires.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_ocean.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts", + "tests/files/web/modifier_reader_batch_five_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "GREASE_PENCIL_MODIFIER_READER_BATCH", + "task": "WBV2-P1151-001", + "owner": "DRAWING", + "sourceBacked": true, + "capabilities": [ + "CAP-GREASE_PENCIL_MODIFIER_READER_BATCH-READER", + "CAP-GREASE_PENCIL_MODIFIER_READER_BATCH-RECOVERY", + "CAP-GREASE_PENCIL_MODIFIER_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_armature.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_build.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_color.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_dash.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_envelope.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_hook.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_lattice.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_length.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_mirror.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_multiply.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_noise.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_offset.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_opacity.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_outline.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_shrinkwrap.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_simplify.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_smooth.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_subdiv.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_texture.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_thickness.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_time.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_tint.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_weight_angle.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_weight_proximity.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts", + "tests/files/web/modifier_grease_pencil_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MODIFIER_READER_BATCH_SIX", + "task": "WBV2-P1152-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH_SIX-READER", + "CAP-MODIFIER_READER_BATCH_SIX-RECOVERY", + "CAP-MODIFIER_READER_BATCH_SIX-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_mesh_to_volume.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_particleinstance.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_surface.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgmix.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgproximity.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts", + "tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MODIFIER_SOURCE_DEPENDENCY_REUSE", + "task": "WBV2-P1153-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_SOURCE_DEPENDENCY_REUSE-READER", + "CAP-MODIFIER_SOURCE_DEPENDENCY_REUSE-RECOVERY", + "CAP-MODIFIER_SOURCE_DEPENDENCY_REUSE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc", + "tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json", + "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json", + "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json", + "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json", + "tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json", + "tools/web/reuse-wbv2-source-dependencies.mjs" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1150-001/manifest.json", + "report": "tests/golden/WBV2-P1150-001/module-receipt.json" + }, + { + "manifest": "tests/golden/WBV2-P1151-001/manifest.json", + "report": "tests/golden/WBV2-P1151-001/module-receipt.json" + }, + { + "manifest": "tests/golden/WBV2-P1152-001/manifest.json", + "report": "tests/golden/WBV2-P1152-001/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MODIFIER_SOLIDIFY_DEPENDENCY_REUSE", + "task": "WBV2-P1154-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_SOLIDIFY_DEPENDENCY_REUSE-READER", + "CAP-MODIFIER_SOLIDIFY_DEPENDENCY_REUSE-RECOVERY", + "CAP-MODIFIER_SOLIDIFY_DEPENDENCY_REUSE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_solidify_extrude.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_solidify_nonmanifold.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_solidify.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_solidify.cc", + "tests/golden/WBV2-P1107-000/modifier-source-roundtrip-production.json", + "tests/golden/WBV2-P1107-000/modifier-source-roundtrip-production.json", + "tools/web/reuse-wbv2-source-dependencies.mjs" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/modifier-source-roundtrip-production.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MODIFIER_RNA_READER_BATCH", + "task": "WBV2-P1155-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_RNA_READER_BATCH-READER", + "CAP-MODIFIER_RNA_READER_BATCH-RECOVERY", + "CAP-MODIFIER_RNA_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts", + "tests/files/web/modifier_grease_pencil_scene.blend", + "tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "MODIFIER_VOLUME_DISPLACE_BATCH", + "task": "WBV2-P1156-001", + "owner": "MODIFIER", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_VOLUME_DISPLACE_BATCH-READER", + "CAP-MODIFIER_VOLUME_DISPLACE_BATCH-RECOVERY", + "CAP-MODIFIER_VOLUME_DISPLACE_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_volume_displace.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts", + "tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "SHAPE_KEY_POINT_READER_BATCH", + "task": "WBV2-P1157-001", + "owner": "ANIMATION", + "sourceBacked": true, + "capabilities": [ + "CAP-SHAPE_KEY_POINT_READER_BATCH-READER", + "CAP-SHAPE_KEY_POINT_READER_BATCH-RECOVERY", + "CAP-SHAPE_KEY_POINT_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_key.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-shape-key-reader-production.spec.ts", + "tests/files/web/rigged_shape_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "LINE_STYLE_READER_BATCH", + "task": "WBV2-P1158-001", + "owner": "DRAWING", + "sourceBacked": true, + "capabilities": [ + "CAP-LINE_STYLE_READER_BATCH-READER", + "CAP-LINE_STYLE_READER_BATCH-RECOVERY", + "CAP-LINE_STYLE_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-line-style-reader-production.spec.ts", + "tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "LINE_STYLE_COLLECTION_READER_BATCH", + "task": "WBV2-P1159-001", + "owner": "DRAWING", + "sourceBacked": true, + "capabilities": [ + "CAP-LINE_STYLE_COLLECTION_READER_BATCH-READER", + "CAP-LINE_STYLE_COLLECTION_READER_BATCH-RECOVERY", + "CAP-LINE_STYLE_COLLECTION_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_main_api.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-line-style-reader-production.spec.ts", + "tests/files/web/line_style_modifier_batch_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + }, + { + "id": "LINE_STYLE_SUBTYPE_READER_BATCH", + "task": "WBV2-P1160-001", + "owner": "DRAWING", + "sourceBacked": true, + "capabilities": [ + "CAP-LINE_STYLE_SUBTYPE_READER_BATCH-READER", + "CAP-LINE_STYLE_SUBTYPE_READER_BATCH-RECOVERY", + "CAP-LINE_STYLE_SUBTYPE_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-line-style-reader-production.spec.ts", + "tests/files/web/line_style_subtype_batch_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "fullFamilyParity": false + } + ], + "tasks": [ + { + "id": "WBV2-P1096-000", + "phase": "1096", + "title": "supersede_generic_continuation_queue", + "kind": "bridge", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1095-003" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "bridge", + "gate": "QUEUE", + "card": "docs/tasks/WBV2-P1096-000.md", + "behavior": "Replace the generic continuation queue with a finite module execution plan without claiming capability parity.", + "outputs": [ + "bridge manifest", + "status" + ], + "acceptance": [ + "no parity claim", + "inventory preserved", + "module plan hash-bound" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1100-000", + "phase": "1100", + "title": "reorganize_module_execution_plan", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1096-000" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1100-000.md", + "behavior": "Reuse completed source-backed work and activate finite module-level implementation and verification.", + "outputs": [ + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "completed receipts reused", + "generic continuation excluded", + "one module active", + "inventory preserved" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1100-001", + "phase": "1100", + "title": "verify_render_light_camera_module", + "kind": "module", + "owner": "RENDER", + "dependsOn": [ + "WBV2-P1100-000" + ], + "parityId": "RENDER_LIGHT_CAMERA", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-render_light_camera", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1100-001.md", + "behavior": "Complete the RENDER_LIGHT_CAMERA module through its shared Blender Main primitives and aggregate case matrix.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "RENDER_LIGHT_CAMERA", + "sourceBacked": true, + "capabilities": [ + "CAP-RENDER-LIGHT-TYPE", + "CAP-RENDER-LIGHT-AREA-SHAPE", + "CAP-RENDER-LIGHT-CONTRIBUTION-FACTORS", + "CAP-RENDER-LIGHT-SHADOW-CONTROLS", + "CAP-RENDER-LIGHT-CASCADE-CONTROLS", + "CAP-RENDER-LIGHT-AREA-SIZE-Z", + "CAP-RENDER-LIGHT-CLIP-START", + "CAP-RENDER-WORLD-LIGHTING-CONTROLS", + "CAP-RENDER-WORLD-PROBE-CONTROLS", + "CAP-RENDER-WORLD-ENVIRONMENT-STRENGTH", + "CAP-RENDER-CAMERA-DOF-FOCUS-OBJECT", + "CAP-RENDER-CAMERA-PANORAMA" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/scene-ir.ts", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P595-002/manifest.json", + "report": "tests/golden/WBV2-P595-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P596-002/manifest.json", + "report": "tests/golden/WBV2-P596-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P597-002/manifest.json", + "report": "tests/golden/WBV2-P597-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P598-002/manifest.json", + "report": "tests/golden/WBV2-P598-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P599-002/manifest.json", + "report": "tests/golden/WBV2-P599-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P600-002/manifest.json", + "report": "tests/golden/WBV2-P600-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P601-002/manifest.json", + "report": "tests/golden/WBV2-P601-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P602-002/manifest.json", + "report": "tests/golden/WBV2-P602-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P603-002/manifest.json", + "report": "tests/golden/WBV2-P603-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P604-002/manifest.json", + "report": "tests/golden/WBV2-P604-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P605-002/manifest.json", + "report": "tests/golden/WBV2-P605-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P606-002/manifest.json", + "report": "tests/golden/WBV2-P606-002/implementation-report.json" + } + ], + "positive": [ + "setLightProperties", + "setWorldProperties", + "setCameraProperties", + "camera panorama", + "world environment", + "light shadow/cascade" + ], + "negative": [ + "invalid enum", + "invalid numeric bounds", + "near/far conflict", + "unknown target", + "stale revision" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "worker disposal" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run test:lighting-field-roundtrip", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-lighting-fields-production.spec.ts tests/e2e/lighting-field-roundtrip.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1100-002", + "phase": "1100", + "title": "verify_scene_object_mesh_module", + "kind": "module", + "owner": "SCENE_MESH", + "dependsOn": [ + "WBV2-P1100-001" + ], + "parityId": "SCENE_OBJECT_MESH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-scene_object_mesh", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1100-002.md", + "behavior": "Complete the SCENE_OBJECT_MESH module through its shared Blender Main primitives and aggregate case matrix.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "SCENE_OBJECT_MESH", + "sourceBacked": true, + "capabilities": [ + "CAP-MESH-TOPOLOGY-FAMILY", + "CAP-CORE-SCENE-OBJECT", + "CAP-OBJECT-MOVE-COLLECTION" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P11-001/manifest.json", + "report": "tests/golden/WBV2-P11-001/mesh-topology-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P12-002/manifest.json", + "report": "tests/golden/WBV2-P12-002/scene-object-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P24-002/manifest.json", + "report": "tests/golden/WBV2-P24-002/object-move-receipt-report.json" + } + ], + "positive": [ + "mesh topology", + "visibility", + "transform", + "collection membership" + ], + "negative": [ + "invalid selection", + "stale revision", + "linked data" + ], + "recovery": [ + "undo", + "redo", + "save/reopen" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-mesh-topology-production.spec.ts tests/e2e/wbv2-scene-object-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1100-003", + "phase": "1100", + "title": "verify_material_animation_module", + "kind": "module", + "owner": "MATERIAL_ANIMATION", + "dependsOn": [ + "WBV2-P1100-002" + ], + "parityId": "MATERIAL_ANIMATION", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-material_animation", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1100-003.md", + "behavior": "Complete the MATERIAL_ANIMATION module through its shared Blender Main primitives and aggregate case matrix.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MATERIAL_ANIMATION", + "sourceBacked": true, + "capabilities": [ + "CAP-MATERIAL-ANIMATION" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P12-003/manifest.json", + "report": "tests/golden/WBV2-P12-003/material-animation-receipt-report.json" + } + ], + "positive": [ + "principled material", + "image node", + "keyframe", + "FCurve" + ], + "negative": [ + "unsupported graph", + "stale revision" + ], + "recovery": [ + "undo", + "redo", + "save/reopen" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-material-animation-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1101-000", + "phase": "1101", + "title": "verify_nonmesh_geometry_module", + "kind": "module", + "owner": "GEOMETRY", + "dependsOn": [ + "WBV2-P1100-003" + ], + "parityId": "NONMESH_GEOMETRY", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-nonmesh_geometry", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1101-000.md", + "behavior": "Complete the NONMESH_GEOMETRY module through its shared Blender Main primitives and aggregate case matrix.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "NONMESH_GEOMETRY", + "sourceBacked": true, + "capabilities": [ + "CAP-VIEWPORT-NONMESH", + "CAP-NATIVE-DATABLOCK" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P12-004/manifest.json", + "report": "tests/golden/WBV2-P12-004/viewport-nonmesh-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P29-003/manifest.json", + "report": "tests/golden/WBV2-P29-003/implementation-report.json" + } + ], + "positive": [ + "curve", + "surface", + "font", + "volume", + "metaball", + "grease pencil" + ], + "negative": [ + "unsupported data", + "resource missing", + "malformed geometry" + ], + "recovery": [ + "save/reopen", + "resource disposal" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-viewport-nonmesh-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1101-001", + "phase": "1101", + "title": "verify_nodes_simulation_module", + "kind": "module", + "owner": "NODES_SIMULATION", + "dependsOn": [ + "WBV2-P1101-000" + ], + "parityId": "NODES_SIMULATION", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-nodes_simulation", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1101-001.md", + "behavior": "Complete the NODES_SIMULATION module through its shared Blender Main primitives and aggregate case matrix.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "NODES_SIMULATION", + "sourceBacked": true, + "capabilities": [ + "CAP-GEOMETRY-NODES", + "CAP-SIMULATION" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P13-002/manifest.json", + "report": "tests/golden/WBV2-P13-002/geometry-nodes-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P13-004/manifest.json", + "report": "tests/golden/WBV2-P13-004/advanced-domain-receipt-report.json" + } + ], + "positive": [ + "allowlisted node graph", + "physics manifest", + "stable hash" + ], + "negative": [ + "unsupported node", + "budget exceeded", + "stale revision" + ], + "recovery": [ + "save/reopen", + "cache disposal" + ], + "commands": [ + "npm --prefix web run test:geometry-node-main-reader", + "npm --prefix web run test:physics-main-reader" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1101-002", + "phase": "1101", + "title": "verify_asset_io_module", + "kind": "module", + "owner": "ASSET", + "dependsOn": [ + "WBV2-P1101-001" + ], + "parityId": "ASSET_IO", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-asset_io", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1101-002.md", + "behavior": "Complete the ASSET_IO module through its shared Blender Main primitives and aggregate case matrix.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "ASSET_IO", + "sourceBacked": true, + "capabilities": [ + "CAP-ASSET-LINK-OVERRIDE-RELOAD", + "CAP-ASSET-CATALOG-MUTATION" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P11-003/manifest.json", + "report": "tests/golden/WBV2-P11-003/asset-link-override-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P10-003/manifest.json", + "report": "tests/golden/WBV2-P10-003/module-matrix-receipt-report.json" + } + ], + "positive": [ + "append", + "link", + "override", + "reload", + "asset catalog v2" + ], + "negative": [ + "missing source", + "ownership violation", + "hash drift", + "collision" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "IndexedDB restart" + ], + "commands": [ + "npm --prefix web run test:asset-catalog-v2", + "npm --prefix web run test:asset-catalog-migration", + "npm --prefix web run test:asset-catalog-negatives", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-asset-link-override-production.spec.ts tests/e2e/wbv2-asset-catalog-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1101-003", + "phase": "1101", + "title": "verify_sculpt_paint_module", + "kind": "module", + "owner": "SCULPT_PAINT", + "dependsOn": [ + "WBV2-P1101-002" + ], + "parityId": "SCULPT_PAINT", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-sculpt_paint", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1101-003.md", + "behavior": "Complete the SCULPT_PAINT module through its shared Blender Main primitives and aggregate case matrix.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "SCULPT_PAINT", + "sourceBacked": true, + "capabilities": [ + "CAP-PAINT-ATTRIBUTES", + "CAP-SCULPT-PAINT" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P16-002/manifest.json", + "report": "tests/golden/WBV2-P16-002/paint-attributes-receipt-report.json" + } + ], + "positive": [ + "vertex colors", + "vertex weights", + "bounded sculpt stroke" + ], + "negative": [ + "mirror unverified", + "invalid patch", + "unsupported brush" + ], + "recovery": [ + "undo", + "redo", + "save/reopen" + ], + "commands": [ + "npm --prefix web run test:paint-roundtrip", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-paint-attributes-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1102-000", + "phase": "1102", + "title": "implement_ui_editor_module", + "kind": "module", + "owner": "EDITOR", + "dependsOn": [ + "WBV2-P1101-003" + ], + "parityId": "UI_EDITOR", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-ui_editor", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1102-000.md", + "behavior": "Complete the UI_EDITOR module through its shared Blender Main primitives and aggregate case matrix.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "UI_EDITOR", + "sourceBacked": true, + "capabilities": [ + "CAP-UI-EDITOR" + ], + "sourcePaths": [ + "web/protocol/editor-workflow.ts", + "web/app/src/app/App.tsx", + "web/app/src/workers/web-engine.worker.ts" + ], + "reuseReceipts": [], + "positive": [ + "editor context", + "workspace", + "area/region" + ], + "negative": [ + "unsupported editor", + "invalid context" + ], + "recovery": [ + "worker restart", + "save/reopen" + ], + "commands": [ + "npm --prefix web run test:editor-main-reader", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/ui-editor-workflow-production.spec.ts", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1102-001", + "phase": "1102", + "title": "close_module_execution_gate", + "kind": "module", + "owner": "RELEASE", + "dependsOn": [ + "WBV2-P1102-000" + ], + "parityId": "INVENTORY_GATE", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-inventory_gate", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1102-001.md", + "behavior": "Complete the INVENTORY_GATE module through its shared Blender Main primitives and aggregate case matrix.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "INVENTORY_GATE", + "sourceBacked": true, + "capabilities": [], + "sourcePaths": [ + "tests/golden/WBV2-P0-002/parity-map.json", + "tests/golden/WBV2-P1100-000/module-execution-plan.json" + ], + "reuseReceipts": [], + "positive": [ + "aggregate module receipts", + "catalog hash" + ], + "negative": [ + "missing receipt", + "hash drift", + "false completion" + ], + "recovery": [ + "re-run affected module only" + ], + "commands": [ + "node tools/web/check-wbv2-module-execution.mjs", + "npm --prefix web run build" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1103-000", + "phase": "1103", + "title": "aggregate_object_operations_module", + "kind": "module", + "owner": "OBJECT", + "dependsOn": [ + "WBV2-P1102-001" + ], + "parityId": "OBJECT_OPERATIONS", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-object_operations", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1103-000.md", + "behavior": "Aggregate the existing source-backed Object Main operations into one module and revalidate the Chromium operator matrix.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "OBJECT_OPERATIONS", + "sourceBacked": true, + "capabilities": [ + "CAP-OBJECT-DUPLICATE", + "CAP-OBJECT-CREATE", + "CAP-OBJECT-PARENT", + "CAP-OBJECT-COLLECTION", + "CAP-OBJECT-RENAME", + "CAP-OBJECT-DELETE", + "CAP-OBJECT-TRANSFORM" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P17-002/manifest.json", + "report": "tests/golden/WBV2-P17-002/object-duplicate-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P18-002/manifest.json", + "report": "tests/golden/WBV2-P18-002/object-create-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P19-002/manifest.json", + "report": "tests/golden/WBV2-P19-002/object-parent-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P20-002/manifest.json", + "report": "tests/golden/WBV2-P20-002/collection-create-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P21-002/manifest.json", + "report": "tests/golden/WBV2-P21-002/object-rename-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P22-002/manifest.json", + "report": "tests/golden/WBV2-P22-002/object-delete-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P23-002/manifest.json", + "report": "tests/golden/WBV2-P23-002/object-transform-receipt-report.json" + } + ], + "positive": [ + "duplicate", + "create", + "parent", + "collection", + "rename", + "delete", + "transform apply" + ], + "negative": [ + "unknown object", + "invalid parent cycle", + "malformed transform" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "deterministic second run" + ], + "commands": [ + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-object-duplicate-production.spec.ts tests/e2e/wbv2-object-create-production.spec.ts tests/e2e/wbv2-object-parent-production.spec.ts tests/e2e/wbv2-collection-create-production.spec.ts tests/e2e/wbv2-object-rename-production.spec.ts tests/e2e/wbv2-object-delete-production.spec.ts tests/e2e/wbv2-object-transform-production.spec.ts", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1104-000", + "phase": "1104", + "title": "verify_compositor_sequencer_module", + "kind": "module", + "owner": "MEDIA", + "dependsOn": [ + "WBV2-P1103-000" + ], + "parityId": "COMPOSITOR_SEQUENCER", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-compositor_sequencer", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1104-000.md", + "behavior": "Verify the source-backed compositor and sequencer module through golden, unsupported-gate and media recovery cases.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main or compositor mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "COMPOSITOR_SEQUENCER", + "sourceBacked": true, + "capabilities": [ + "CAP-COMPOSITOR-NODE-GRAPH", + "CAP-COMPOSITOR-UNSUPPORTED-GATE", + "CAP-SEQUENCER-MEDIA-RECOVERY" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/compositor.ts", + "web/protocol/sequencer.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P29-003/manifest.json", + "report": "tests/golden/WBV2-P29-003/implementation-report.json" + } + ], + "positive": [ + "compositor node graph", + "sequencer still-image timeline", + "media cache contract" + ], + "negative": [ + "unsupported compositor node", + "invalid sequencer strip", + "stale media revision" + ], + "recovery": [ + "worker restart", + "save/reopen", + "media cache replay", + "movie codec blocked without READY receipt" + ], + "commands": [ + "npm --prefix web run test:compositor-node-golden", + "npm --prefix web run test:compositor-unsupported-gate", + "npm --prefix web run test:sequencer-main-reader", + "node --test web/tests/unit/sequencer-media-cache.test.mjs", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/smoke.spec.ts -g \"N-021 sequencer|real Blender 5.2 sequencer\"", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1105-000", + "phase": "1105", + "title": "verify_audio_particle_module", + "kind": "module", + "owner": "AUDIO_PARTICLE", + "dependsOn": [ + "WBV2-P1104-000" + ], + "parityId": "AUDIO_PARTICLE", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-audio_particle", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1105-000.md", + "behavior": "Verify Sound, Speaker and ParticleSettings mutations against authoritative Blender Main with explicit build capability gates.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven or a typed build capability blocker is recorded", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "AUDIO_PARTICLE", + "sourceBacked": true, + "capabilities": [ + "CAP-SOUND-PROPERTIES", + "CAP-SPEAKER-PROPERTIES", + "CAP-PARTICLE-SETTINGS" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/protocol/io-media-commands.ts", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P33-001/manifest.json", + "report": "tests/golden/WBV2-P33-001/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P33-002/manifest.json", + "report": "tests/golden/WBV2-P33-002/implementation-report.json" + } + ], + "positive": [ + "Sound properties", + "Speaker properties", + "ParticleSettings properties" + ], + "negative": [ + "missing Main datablock", + "unsupported build feature", + "out-of-range property" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "worker restart" + ], + "commands": [ + "cmake --build build_web_blender6 --target web_engine -- -j8", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-audio-particle-production.spec.ts", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1106-000", + "phase": "1106", + "title": "verify_rig_animation_module", + "kind": "module", + "owner": "RIG", + "dependsOn": [ + "WBV2-P1105-000" + ], + "parityId": "RIG_ANIMATION", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-rig_animation", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1106-000.md", + "behavior": "Verify armature pose, constraints and NLA animation through the existing Blender Main primitives.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "RIG_ANIMATION", + "sourceBacked": true, + "capabilities": [ + "CAP-RIG-POSE", + "CAP-CONSTRAINTS", + "CAP-NLA-ANIMATION" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/web-engine.ts", + "web/protocol/nla.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P13-003/manifest.json", + "report": "tests/golden/WBV2-P13-003/rig-pose-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P13-004/manifest.json", + "report": "tests/golden/WBV2-P13-004/advanced-domain-receipt-report.json" + } + ], + "positive": [ + "armature pose", + "constraint edit", + "NLA stack" + ], + "negative": [ + "missing bone", + "invalid constraint influence", + "stale NLA revision" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "deterministic second run" + ], + "commands": [ + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-rig-pose-production.spec.ts", + "npm --prefix web run test:nla-operator", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1107-000", + "phase": "1107", + "title": "verify_modifier_system_module", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1106-000" + ], + "parityId": "MODIFIER_SYSTEM", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_system", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1107-000.md", + "behavior": "Verify modifier stack visibility and bounded parameter mutation through authoritative Blender Main.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_SYSTEM", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER-STATE-MUTATION", + "CAP-MODIFIER-PARAMETER-EDIT", + "CAP-MODIFIER-STACK-READER" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/protocol/modifier-graph.ts", + "web/protocol/depsgraph.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P9-002/manifest.json", + "report": "tests/golden/WBV2-P9-002/modifier-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P11-002/manifest.json", + "report": "tests/golden/WBV2-P11-002/modifier-parameter-receipt-report.json" + } + ], + "positive": [ + "modifier visibility toggle", + "bounded DECIMATE parameter mutation", + "modifier stack evaluation reader" + ], + "negative": [ + "unknown modifier UUID", + "stale mesh revision", + "out-of-range parameter" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "deterministic second run" + ], + "commands": [ + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-production.spec.ts tests/e2e/wbv2-modifier-parameter-production.spec.ts", + "npm --prefix web run test:modifier-goldens", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1108-000", + "phase": "1108", + "title": "verify_nodes_graph_module", + "kind": "module", + "owner": "NODES", + "dependsOn": [ + "WBV2-P1107-000" + ], + "parityId": "NODES_GRAPH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-nodes_graph", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1108-000.md", + "behavior": "Verify Geometry Nodes graph identity, allowlisted evaluation, field budgets and unsupported graph retention.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive graph reader/evaluation evidence is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "NODES_GRAPH", + "sourceBacked": true, + "capabilities": [ + "CAP-GEOMETRY-NODES-GRAPH", + "CAP-GEOMETRY-NODES-ALLOWLIST", + "CAP-GEOMETRY-NODES-FIELD-BUDGET" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/protocol/geometry-nodes.ts", + "web/protocol/geometry-node-commands.ts", + "web/protocol/depsgraph.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P13-002/manifest.json", + "report": "tests/golden/WBV2-P13-002/geometry-nodes-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P13-004/manifest.json", + "report": "tests/golden/WBV2-P13-004/advanced-domain-receipt-report.json" + } + ], + "positive": [ + "allowlisted graph identity", + "Blender depsgraph geometry evaluation", + "field materialization with exact domain cardinality" + ], + "negative": [ + "unsupported node graph", + "field budget overflow", + "stale or invalid graph command" + ], + "recovery": [ + "save/reopen", + "worker restart", + "graph retention after rejected command", + "deterministic second run" + ], + "commands": [ + "npm --prefix web run test:geometry-node-evaluator-golden", + "npm --prefix web run test:geometry-node-field-budget", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-geometry-nodes-production.spec.ts", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1109-000", + "phase": "1109", + "title": "verify_io_format_module", + "kind": "module", + "owner": "MEDIA", + "dependsOn": [ + "WBV2-P1108-000" + ], + "parityId": "IO_FORMAT", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-io_format", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1109-000.md", + "behavior": "Verify format capability routing, runtime receipts, recovery and fail-closed file UI gates.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive format routing/readiness evidence is proven", + "negative and recovery cases are proven", + "Chromium and deterministic recovery receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "IO_FORMAT", + "sourceBacked": true, + "capabilities": [ + "CAP-IO-FORMAT-CAPABILITY-MATRIX", + "CAP-IO-FORMAT-RUNTIME-RECEIPTS", + "CAP-IO-FORMAT-RECOVERY", + "CAP-IO-FORMAT-UI-GATE" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/asset-library-io.ts", + "web/protocol/io-format-capability-matrix.ts", + "web/protocol/io-format-receipt-binding.ts", + "web/protocol/io-format-runtime-receipt.ts", + "web/protocol/io-format-recovery.ts", + "web/protocol/io-format-ui-gate.ts", + "web/protocol/glb-export.ts", + "web/protocol/glb-import.ts", + "web/protocol/nonmesh-export.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx" + ], + "reuseReceipts": [], + "positive": [ + "GLB export readiness", + "format runtime receipt inventory", + "declared .blend import route" + ], + "negative": [ + "unverified format route", + "cancelled or OOM operation", + "unsupported file extension" + ], + "recovery": [ + "worker restart", + "small operation recovery", + "deterministic receipt replay", + "fail-closed UI route" + ], + "commands": [ + "node tools/web/check-io-format-receipt-bindings.mjs", + "node tools/web/check-io-format-runtime-receipts.mjs", + "node tools/web/check-io-format-recovery.mjs", + "node tools/web/check-io-format-ui-gate.mjs", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/io-format-recovery.spec.ts tests/e2e/io-format-ui-gate.spec.ts", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1110-000", + "phase": "1110", + "title": "verify_render_pipeline_module", + "kind": "module", + "owner": "RENDER", + "dependsOn": [ + "WBV2-P1109-000" + ], + "parityId": "RENDER_PIPELINE", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-render_pipeline", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1110-000.md", + "behavior": "Verify render backend routing, explicit resource budgets and Blender reference comparison in Chromium.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive render/reference evidence is proven", + "negative and recovery cases are proven", + "Chromium and deterministic render receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "RENDER_PIPELINE", + "sourceBacked": true, + "capabilities": [ + "CAP-RENDER-BACKEND-ROUTING", + "CAP-RENDER-RESOURCE-BUDGET", + "CAP-RENDER-REFERENCE-COMPARISON" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/render-routing.ts", + "web/protocol/render-budget.ts", + "web/protocol/render-capabilities.ts", + "web/protocol/render-image-comparison.ts", + "web/protocol/server-render-job.ts", + "web/app/src/three-adapter/render-routing.ts", + "web/app/src/three-adapter/render-image-comparison.ts", + "web/app/src/workers/viewport-render.worker.ts", + "web/app/src/app/App.tsx", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [], + "positive": [ + "bounded local backend routing", + "reference render metrics", + "resource budget acceptance" + ], + "negative": [ + "unknown or unavailable backend", + "aggregate texture/light budget overflow", + "wrong composition reference" + ], + "recovery": [ + "retain previous texture set", + "offscreen renderer parity", + "worker restart", + "deterministic second render" + ], + "commands": [ + "npm --prefix web run test:render-resource-budget", + "npm --prefix web run test:render-routing", + "npm --prefix web run test:render-reference", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1111-000", + "phase": "1111", + "title": "verify_scripting_security_module", + "kind": "module", + "owner": "SCRIPTING", + "dependsOn": [ + "WBV2-P1110-000" + ], + "parityId": "SCRIPTING_SECURITY", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-scripting_security", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1111-000.md", + "behavior": "Verify script source Main reader, deny-by-default permission policy and sandbox isolation/recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive reader and policy evidence is proven", + "negative and recovery cases are proven", + "Chromium sandbox receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "SCRIPTING_SECURITY", + "sourceBacked": true, + "capabilities": [ + "CAP-SCRIPT-MAIN-READER", + "CAP-SCRIPT-PERMISSION-POLICY", + "CAP-SCRIPT-SANDBOX-ISOLATION", + "CAP-SCRIPT-SANDBOX-RECOVERY" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/scene-ir.ts", + "web/protocol/scripting-platform.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/workers/script-permission-policy-test.worker.ts", + "web/app/src/workers/script-sandbox-isolation-test.worker.ts", + "web/app/src/workers/script-sandbox-recovery-test.worker.ts", + "web/app/src/testing/script-sandbox-recovery.ts", + "web/app/src/app/App.tsx" + ], + "reuseReceipts": [], + "positive": [ + "script source inventory reader", + "explicit READ_MAIN permission", + "new-generation recovery audit" + ], + "negative": [ + "autorun denied by default", + "undeclared permission", + "sandbox crash/timeout/late result" + ], + "recovery": [ + "worker restart", + "sandbox generation rollover", + "continuous audit chain", + "deterministic second run" + ], + "commands": [ + "npm --prefix web run test:script-main-reader", + "npm --prefix web run test:scripting-isolation", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/script-permission-policy.spec.ts tests/e2e/script-sandbox-isolation.spec.ts tests/e2e/script-sandbox-recovery.spec.ts", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1112-000", + "phase": "1112", + "title": "verify_animation_timeline_module", + "kind": "module", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1111-000" + ], + "parityId": "ANIMATION_TIMELINE", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-animation_timeline", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1112-000.md", + "behavior": "Verify frame evaluation and NLA time mapping through the production Worker and Blender Main.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive frame/NLA evaluation is proven", + "negative and recovery cases are proven", + "Chromium and deterministic evaluation receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "ANIMATION_TIMELINE", + "sourceBacked": true, + "capabilities": [ + "CAP-FRAME-EVALUATION", + "CAP-NLA-TIME-MAPPING", + "CAP-ANIMATION-SAVE-REOPEN" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/protocol/nla.ts", + "web/protocol/depsgraph.ts", + "web/protocol/scene-ir.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P13-004/manifest.json", + "report": "tests/golden/WBV2-P13-004/advanced-domain-receipt-report.json" + } + ], + "positive": [ + "frame 1/5/10 evaluation", + "NLA track and strip mapping", + "Blender depsgraph animation result" + ], + "negative": [ + "stale NLA revision", + "invalid strip topology", + "unsupported animation domain" + ], + "recovery": [ + "save/reopen", + "worker restart", + "deterministic repeated evaluation", + "preserve rejected stack" + ], + "commands": [ + "npm --prefix web run test:frame-evaluation", + "node tools/web/check-nla-evaluation-golden.mjs", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/nla-evaluation-golden.spec.ts", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1113-000", + "phase": "1113", + "title": "verify_shader_material_module", + "kind": "module", + "owner": "MATERIAL", + "dependsOn": [ + "WBV2-P1112-000" + ], + "parityId": "SHADER_MATERIAL", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-shader_material", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1113-000.md", + "behavior": "Verify bounded Shader graph compilation, stable compile keys and fail-closed pipeline recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Shader Main compilation is proven", + "negative and recovery cases are proven", + "Chromium and deterministic compile receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "SHADER_MATERIAL", + "sourceBacked": true, + "capabilities": [ + "CAP-SHADER-GRAPH-COMPILER", + "CAP-SHADER-COMPILE-KEY", + "CAP-SHADER-FAIL-CLOSED-RECOVERY" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/protocol/shader-graph.ts", + "web/protocol/shader-graph-commands.ts", + "web/protocol/shader-compiler.ts", + "web/protocol/render-capabilities.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [], + "positive": [ + "Principled/Image/Normal/Math graph compile", + "stable compile key", + "real Main shader material path" + ], + "negative": [ + "unknown shader node", + "graph cycle or duplicate link", + "unsupported renderer backend" + ], + "recovery": [ + "retain previous material after compile failure", + "worker restart", + "deterministic repeated compile", + "save/reopen material graph" + ], + "commands": [ + "npm --prefix web run test:shader-compile", + "npm --prefix web run test:shader-pipeline", + "npm --prefix web run test:shader-capability", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1114-000", + "phase": "1114", + "title": "verify_grease_pencil_module", + "kind": "module", + "owner": "DRAWING", + "dependsOn": [ + "WBV2-P1113-000" + ], + "parityId": "GREASE_PENCIL", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-grease_pencil", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1114-000.md", + "behavior": "Verify Grease Pencil layer/frame Main mutations, stable identity validation and roundtrip recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Grease Pencil Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "GREASE_PENCIL", + "sourceBacked": true, + "capabilities": [ + "CAP-GREASE-PENCIL-LAYER-FRAME", + "CAP-GREASE-PENCIL-STROKE-READER", + "CAP-GREASE-PENCIL-ROUNDTRIP" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/scene-ir.ts", + "web/protocol/grease-pencil.ts", + "web/protocol/grease-pencil-reorder.ts", + "web/protocol/grease-pencil-selection.ts", + "web/protocol/grease-pencil-marquee.ts", + "web/app/src/app/App.tsx", + "web/app/src/three-adapter/grease-pencil.ts", + "web/app/src/three-adapter/viewport.ts", + "web/app/src/three-adapter/offscreen-viewport.ts", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [], + "positive": [ + "create and reorder layer", + "insert and move frame", + "stable Grease Pencil drawing reader" + ], + "negative": [ + "forged drawing identity", + "occupied frame target", + "stale layer/frame revision" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "deterministic layer/frame replay" + ], + "commands": [ + "npm --prefix web run test:grease-pencil-reorder", + "npm --prefix web run test:grease-pencil", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1115-000", + "phase": "1115", + "title": "verify_curve_surface_editing_module", + "kind": "module", + "owner": "GEOMETRY", + "dependsOn": [ + "WBV2-P1114-000" + ], + "parityId": "CURVE_SURFACE_EDITING", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-curve_surface_editing", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1115-000.md", + "behavior": "Verify Curve topology/handle edits, Surface topology and non-mesh/font roundtrip through Blender Main.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive non-mesh Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "CURVE_SURFACE_EDITING", + "sourceBacked": true, + "capabilities": [ + "CAP-CURVE-TOPOLOGY-HANDLES", + "CAP-SURFACE-TOPOLOGY", + "CAP-NONMESH-FONT-ROUNDTRIP" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/web-engine.ts", + "web/protocol/nonmesh-geometry-commands.ts", + "web/protocol/curve-topology-editor.ts", + "web/protocol/non-mesh.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P12-004/manifest.json", + "report": "tests/golden/WBV2-P12-004/viewport-nonmesh-receipt-report.json" + } + ], + "positive": [ + "Curve control point and handle edit", + "Curve cyclic/topology operator", + "Surface and Font property mutation" + ], + "negative": [ + "invalid curve selection/domain", + "occupied or stale frame/topology target", + "malformed non-mesh property" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "deterministic multispline replay" + ], + "commands": [ + "npm --prefix web run test:curve-topology-operator", + "npm --prefix web run test:nonmesh-roundtrip", + "npm --prefix web run test:nonmesh-desktop-golden", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1116-000", + "phase": "1116", + "title": "verify_storage_recovery_module", + "kind": "module", + "owner": "STORAGE", + "dependsOn": [ + "WBV2-P1115-000" + ], + "parityId": "STORAGE_RECOVERY", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-storage_recovery", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1116-000.md", + "behavior": "Verify IndexedDB catalog migration/restart and OPFS asset preview deduplication, quarantine and reference GC.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive storage commit/recovery evidence is proven", + "negative and quarantine cases are proven", + "Chromium restart receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "STORAGE_RECOVERY", + "sourceBacked": true, + "capabilities": [ + "CAP-INDEXEDDB-CATALOG-MIGRATION", + "CAP-OPFS-PREVIEW-COMMIT", + "CAP-OPFS-QUARANTINE-GC" + ], + "sourcePaths": [ + "web/protocol/storage.ts", + "web/protocol/storage-budget.ts", + "web/protocol/save-transaction.ts", + "web/protocol/recent-projects.ts", + "web/protocol/asset-preview.ts", + "web/protocol/asset-preview-decode.ts", + "web/app/src/storage/asset-catalog-indexeddb.ts", + "web/app/src/storage/asset-preview-opfs-commit.ts", + "web/app/src/storage/asset-preview-quarantine.ts", + "web/app/src/storage/asset-preview-reference-gc.ts", + "web/app/src/storage/opfs-files.ts", + "web/app/src/storage/migrations.ts", + "web/app/src/workers/storage.worker.ts", + "web/app/src/app/App.tsx" + ], + "reuseReceipts": [], + "positive": [ + "v1 to v2 catalog migration", + "page/Worker restart identity", + "content-addressed preview deduplication" + ], + "negative": [ + "partial catalog migration", + "corrupt preview quarantine", + "cross-project or non-final reference GC" + ], + "recovery": [ + "IndexedDB restart", + "OPFS commit replay", + "quarantine cleanup", + "deterministic reference reclamation" + ], + "commands": [ + "npm --prefix web run test:asset-catalog-restart", + "npm --prefix web run test:asset-preview-dedup", + "npm --prefix web run test:asset-preview-quarantine", + "npm --prefix web run test:asset-preview-reference-gc", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1117-000", + "phase": "1117", + "title": "verify_simulation_cache_module", + "kind": "module", + "owner": "SIMULATION", + "dependsOn": [ + "WBV2-P1116-000" + ], + "parityId": "SIMULATION_CACHE", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-simulation_cache", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1117-000.md", + "behavior": "Verify simulation cache identity, physics-family payload integrity, lifecycle recovery and deterministic LRU pruning.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive cache identity/lifecycle evidence is proven", + "negative integrity and budget cases are proven", + "Chromium restart and quarantine receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "SIMULATION_CACHE", + "sourceBacked": true, + "capabilities": [ + "CAP-SIMULATION-CACHE-IDENTITY", + "CAP-PHYSICS-CACHE-INTEGRITY", + "CAP-SIMULATION-CACHE-RECOVERY" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/simulation-cache.ts", + "web/protocol/physics-simulation.ts", + "web/protocol/physics-cache-playback.ts", + "web/protocol/storage.ts", + "web/app/src/workers/storage.worker.ts", + "web/app/src/app/App.tsx" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P13-004/manifest.json", + "report": "tests/golden/WBV2-P13-004/advanced-domain-receipt-report.json" + } + ], + "positive": [ + "graph/source/revision cache identity", + "all physics-family frame hashes", + "verified playback lifecycle" + ], + "negative": [ + "source or payload hash drift", + "revision/range mismatch", + "cache byte/frame budget overflow" + ], + "recovery": [ + "cancel and cleanup", + "LRU prune with protected playback", + "corruption quarantine", + "worker restart" + ], + "commands": [ + "npm --prefix web run test:simulation-cache-identity", + "npm --prefix web run test:simulation-cache-lifecycle", + "npm --prefix web run test:physics-cache-family", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1118-000", + "phase": "1118", + "title": "verify_ui_input_interaction_module", + "kind": "module", + "owner": "EDITOR", + "dependsOn": [ + "WBV2-P1117-000" + ], + "parityId": "UI_INPUT_INTERACTION", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-ui_input_interaction", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1118-000.md", + "behavior": "Verify keyboard-only user actions, input mutex, IME/pointer state and responsive editor interaction under deployment CSP.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive keyboard Main mutation and save are proven", + "negative mutex/input cases are proven", + "Chromium accessibility and responsive receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "UI_INPUT_INTERACTION", + "sourceBacked": true, + "capabilities": [ + "CAP-KEYBOARD-USER-ACTIONS", + "CAP-INPUT-MODAL-STATE", + "CAP-IME-SHORTCUT-GUARD", + "CAP-RESPONSIVE-CSP-UI" + ], + "sourcePaths": [ + "web/app/index.html", + "web/app/src/app/App.tsx", + "web/app/src/app/app-shell.css", + "web/app/src/workers/web-engine.worker.ts", + "web/protocol/user-action-state.ts", + "web/protocol/project-action-mutex.ts", + "web/protocol/ime-composition.ts", + "web/protocol/input-modal.ts", + "web/protocol/pointer-contract.ts", + "web/protocol/worker-fault.ts", + "web/tests/unit/user-action-state.test.mjs", + "web/tests/unit/project-action-mutex.test.mjs", + "web/tests/unit/ime-composition.test.mjs", + "web/tests/unit/input-modal.test.mjs", + "web/tests/unit/pointer-contract.test.mjs" + ], + "reuseReceipts": [], + "positive": [ + "keyboard-only Add Cube Main mutation", + "keyboard save/reopen and GLB export", + "responsive controls at desktop/mobile viewports" + ], + "negative": [ + "concurrent project action mutex", + "IME shortcut suppression", + "pointer cancel/touch modal cleanup" + ], + "recovery": [ + "worker restart", + "save interruption recovery", + "responsive layout preservation", + "deterministic repeated keyboard loop" + ], + "commands": [ + "node --test web/tests/unit/user-action-state.test.mjs web/tests/unit/project-action-mutex.test.mjs web/tests/unit/ime-composition.test.mjs web/tests/unit/input-modal.test.mjs web/tests/unit/pointer-contract.test.mjs", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/user-action-state.spec.ts tests/e2e/project-action-mutex.spec.ts tests/e2e/keyboard-accessibility.spec.ts tests/e2e/responsive-layout.spec.ts", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1119-000", + "phase": "1119", + "title": "verify_library_workflow_module", + "kind": "module", + "owner": "ASSET", + "dependsOn": [ + "WBV2-P1118-000" + ], + "parityId": "LIBRARY_WORKFLOW", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-library_workflow", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1119-000.md", + "behavior": "Verify append, link, override and reload library flows through authoritative Main with path and dependency safety gates.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive library Main mutation is proven", + "negative and recovery cases are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "LIBRARY_WORKFLOW", + "sourceBacked": true, + "capabilities": [ + "CAP-LIBRARY-APPEND", + "CAP-LIBRARY-LINK", + "CAP-LIBRARY-OVERRIDE", + "CAP-LIBRARY-RELOAD-SAFETY" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/library-main-append.ts", + "web/protocol/library-linked-mutation.ts", + "web/protocol/library-linked-reload.ts", + "web/protocol/library-linked-missing.ts", + "web/protocol/library-override-writer.ts", + "web/protocol/library-override-freshness.ts", + "web/protocol/library-negative-cases.ts", + "web/protocol/library-operation-identity.ts", + "web/protocol/library-source-origin.ts", + "web/protocol/asset-path.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P11-003/manifest.json", + "report": "tests/golden/WBV2-P11-003/asset-link-override-receipt-report.json" + }, + { + "manifest": "tests/golden/WBV2-P9-003/manifest.json", + "report": "tests/golden/WBV2-P9-003/asset-catalog-receipt-report.json" + } + ], + "positive": [ + "append object into Main", + "linked read-only object", + "local override and reload identity" + ], + "negative": [ + "missing library source", + "dependency/cross-library cycle", + "unsafe path or ownership mutation" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "deterministic library replay" + ], + "commands": [ + "npm --prefix web run test:library-main-append", + "npm --prefix web run test:library-link-chromium", + "npm --prefix web run test:library-override-chromium", + "npm --prefix web run test:library-negative-cases", + "npm --prefix web run test:library-path-security", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1120-000", + "phase": "1120", + "title": "verify_volume_nanovdb_module", + "kind": "module", + "owner": "MEDIA", + "dependsOn": [ + "WBV2-P1119-000" + ], + "parityId": "VOLUME_NANOVDB", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-volume_nanovdb", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1120-000.md", + "behavior": "Verify NanoVDB manifest, paged feedback, OPFS commit/restart and production viewport volume roundtrip.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive volume resource and viewport evidence is proven", + "negative and recovery cases are proven", + "Chromium OPFS/restart receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "VOLUME_NANOVDB", + "sourceBacked": true, + "capabilities": [ + "CAP-NANOVDB-MANIFEST", + "CAP-NANOVDB-PAGED-FEEDBACK", + "CAP-NANOVDB-OPFS-RESTART", + "CAP-NANOVDB-VIEWPORT-ROUNDTRIP" + ], + "sourcePaths": [ + "web/protocol/volume-vdb.ts", + "web/protocol/nanovdb-page-feedback.ts", + "web/protocol/nanovdb-device-recovery.ts", + "web/protocol/storage.ts", + "web/app/src/volume/nanovdb-opfs.ts", + "web/app/src/volume/nanovdb-stream.ts", + "web/app/src/volume/nanovdb-viewport.ts", + "web/app/src/volume/nanovdb-float32.ts", + "web/app/src/render/nanovdb-volume-renderer.ts", + "web/app/src/workers/vdb-opfs-test.worker.ts", + "web/app/src/workers/storage.worker.ts", + "web/app/src/app/App.tsx" + ], + "reuseReceipts": [], + "positive": [ + "validated NanoVDB bundle manifest", + "content-addressed OPFS commit", + "main/offscreen production viewport volume" + ], + "negative": [ + "manifest/chunk hash mismatch", + "stale source binding", + "WebGPU/resource availability block" + ], + "recovery": [ + "OPFS Worker restart", + "paged feedback resume", + "quota/device loss cleanup", + "deterministic volume save/reopen" + ], + "commands": [ + "npm --prefix web run test:vdb-availability", + "npm --prefix web run test:vdb-native", + "npm --prefix web run test:nanovdb-page-feedback", + "npm --prefix web run test:nanovdb-opfs-restart", + "npm --prefix web run test:nanovdb-volume-roundtrip", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1121-000", + "phase": "1121", + "title": "verify_paint_stroke_module", + "kind": "module", + "owner": "SCULPT", + "dependsOn": [ + "WBV2-P1120-000" + ], + "parityId": "PAINT_STROKE", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-paint_stroke", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1121-000.md", + "behavior": "Verify paint pointer sessions, depth visibility and PBVH capability gates through the production Worker.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive paint Main transaction is proven", + "negative and recovery cases are proven", + "Chromium pointer/GPU receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "PAINT_STROKE", + "sourceBacked": true, + "capabilities": [ + "CAP-PAINT-POINTER-SESSION", + "CAP-PAINT-DEPTH-VISIBILITY", + "CAP-PAINT-PBVH-GATE" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/web-engine.ts", + "web/protocol/sculpt.ts", + "web/protocol/paint.ts", + "web/protocol/paint-stroke-session.ts", + "web/protocol/paint-depth-visibility.ts", + "web/protocol/paint-pbvh-capability.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/three-adapter/paint-depth-visibility.ts", + "web/app/src/three-adapter/viewport.ts", + "web/app/src/three-adapter/offscreen-viewport.ts", + "web/app/src/app/App.tsx", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [], + "positive": [ + "ordered paint pointer chunks", + "main/offscreen depth visibility", + "PBVH inventory capability query" + ], + "negative": [ + "stale/discontinuous pointer chunks", + "forged or over-budget depth samples", + "missing PBVH WASM entrypoint" + ], + "recovery": [ + "pointer cancel without Main mutation", + "undo step after paint commit", + "worker restart", + "deterministic capability replay" + ], + "commands": [ + "npm --prefix web run test:paint-stroke-session", + "npm --prefix web run test:paint-depth-visibility", + "npm --prefix web run test:paint-pbvh-capability", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1122-000", + "phase": "1122", + "title": "verify_engine_runtime_module", + "kind": "module", + "owner": "RUNTIME", + "dependsOn": [ + "WBV2-P1121-000" + ], + "parityId": "ENGINE_RUNTIME", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-engine_runtime", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1122-000.md", + "behavior": "Verify WebEngine variant manifest/selection, compiled WASM Main ABI and Worker crash recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive compiled WASM Main lifecycle is proven", + "negative variant/hash cases are proven", + "Chromium Worker restart receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "ENGINE_RUNTIME", + "sourceBacked": true, + "capabilities": [ + "CAP-ENGINE-VARIANT-MANIFEST", + "CAP-ENGINE-WASM-MAIN-ABI", + "CAP-WORKER-CRASH-RECOVERY" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_api.h", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/CMakeLists.txt", + "web/protocol/engine-variant.ts", + "web/protocol/worker-fault.ts", + "web/protocol/save-transaction.ts", + "web/app/src/engine-client/engine-variant-bootstrap.ts", + "web/app/src/engine-client/browser-engine-variant-session.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/workers/storage.worker.ts", + "web/app/src/app/App.tsx", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [], + "positive": [ + "single/pthread manifest binding", + "compiled WASM Main open/save lifecycle", + "engine and storage Worker recovery" + ], + "negative": [ + "malformed variant/resource declaration", + "mixed-version/hash mismatch", + "pthread unavailable fallback" + ], + "recovery": [ + "single-thread fallback", + "Worker crash restart", + "operation-log restore", + "deterministic repeated startup" + ], + "commands": [ + "npm --prefix web run test:engine-manifest-v2", + "npm --prefix web run test:engine-variant-selection", + "npm --prefix web run test:engine-variant-fallback", + "npm --prefix web run test:engine-variant-install", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-native-engine-production.spec.ts tests/e2e/worker-crash-recovery.spec.ts", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1123-000", + "phase": "1123", + "title": "repair_glb_roundtrip_dependency_module", + "kind": "module", + "owner": "MEDIA", + "dependsOn": [ + "WBV2-P1122-000" + ], + "parityId": "GLB_ROUNDTRIP_REPAIR", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-glb_roundtrip_repair", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1123-000.md", + "behavior": "Repair the standalone GLB checker dependency chain and verify mesh/non-mesh Blender roundtrip plus Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive GLB and non-mesh roundtrip are proven", + "negative and recovery cases are proven", + "Chromium save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "GLB_ROUNDTRIP_REPAIR", + "sourceBacked": true, + "capabilities": [ + "CAP-GLB-MESH-ROUNDTRIP", + "CAP-GLB-NONMESH-ROUNDTRIP", + "CAP-GLB-CHROMIUM-RECOVERY" + ], + "sourcePaths": [ + "tools/web/check-glb-blender-roundtrip.mjs", + "tools/web/check-nonmesh-glb-blender-roundtrip.mjs", + "tools/web/blender-check-glb-roundtrip.py", + "web/protocol/glb-export.ts", + "web/protocol/glb-import.ts", + "web/protocol/nonmesh-export.ts", + "web/protocol/nonmesh-binary.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx" + ], + "reuseReceipts": [], + "positive": [ + "mesh/material/skin/animation GLB roundtrip", + "Curve/Surface/Font/Metaball non-mesh mapping", + "desktop GLB Main persistence in Chromium" + ], + "negative": [ + "sparse or oversized GLB", + "external URI/extension rejection", + "non-mesh export loss gate" + ], + "recovery": [ + "cancel without publishing output", + "Worker restart", + "OPFS quota retains old asset", + "deterministic Blender roundtrip" + ], + "commands": [ + "npm --prefix web run test:glb-blender-roundtrip", + "npm --prefix web run test:nonmesh-glb-blender-roundtrip", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/glb-negative-cases.spec.ts tests/e2e/glb-recovery.spec.ts tests/e2e/glb-main-persistence.spec.ts", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1124-000", + "phase": "1124", + "title": "record_historical_hash_drift_module", + "kind": "module", + "owner": "PROVENANCE", + "dependsOn": [ + "WBV2-P1123-000" + ], + "parityId": "HISTORICAL_HASH_DRIFT", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-historical_hash_drift", + "gate": "EVIDENCE", + "card": "docs/tasks/WBV2-P1124-000.md", + "behavior": "Record legacy M12 artifact hash drift without re-signing historical manifests or changing the immutable inventory.", + "outputs": [ + "drift report", + "module receipt", + "manifest", + "status" + ], + "acceptance": [ + "original and observed hashes are recorded", + "provenance remains BLOCKED_SOURCE_LOST where bytes cannot be restored", + "historical manifests and inventory remain unchanged", + "deterministic drift evidence is reproducible", + "no full-family parity claim" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "HISTORICAL_HASH_DRIFT", + "sourceBacked": true, + "capabilities": [ + "CAP-HISTORICAL-HASH-AUDIT", + "CAP-PROVENANCE-SOURCE-LOST-GATE" + ], + "sourcePaths": [ + "tools/web/check-m12-manifest-drift.mjs", + "tests/golden/corrective/rehydration/M12-manifest-sha-drift.json", + "tests/golden/WBV2-P0-002/parity-map.json" + ], + "reuseReceipts": [], + "positive": [ + "84 drift entries captured", + "43 affected artifact paths indexed", + "immutable inventory binding preserved" + ], + "negative": [ + "missing original bytes", + "attempted historical re-signing", + "inventory mutation" + ], + "recovery": [ + "deterministic report rerun", + "source cache can restore original bytes later", + "new capability manifests reference drift evidence only" + ], + "commands": [ + "node tools/web/check-m12-manifest-drift.mjs --write", + "node tools/web/check-m12-manifest-drift.mjs", + "node tools/web/check-wbv2-module-execution.mjs" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1125-000", + "phase": "1125", + "title": "repair_geometry_nodes_allowlist_module", + "kind": "module", + "owner": "NODES", + "dependsOn": [ + "WBV2-P1124-000" + ], + "parityId": "GEOMETRY_NODES_ALLOWLIST_REPAIR", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-geometry_nodes_allowlist_repair", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1125-000.md", + "behavior": "Persist Geometry Nodes graph overrides in Web-safe Main storage and align allowlist assertions with real materialization behavior.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "supported graph Main materialization is proven", + "unsupported graph remains rejected without mutation", + "save/reopen graph retention is exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "GEOMETRY_NODES_ALLOWLIST_REPAIR", + "sourceBacked": true, + "capabilities": [ + "CAP-GEOMETRY-NODES-MAIN-PERSISTENCE", + "CAP-GEOMETRY-NODES-ALLOWLIST-CONSISTENCY", + "CAP-GEOMETRY-NODES-SAVE-REOPEN" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/geometry-nodes.ts", + "web/protocol/geometry-node-commands.ts", + "web/protocol/web-engine.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/tests/e2e/geometry-node-allowlist.spec.ts", + "web/tests/e2e/wbv2-geometry-nodes-production.spec.ts", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [], + "positive": [ + "allowlisted graph materializes into Main", + "Scene IDProperty graph override persists", + "save/reopen retains graph identity/hash" + ], + "negative": [ + "unsupported simulation node", + "invalid graph schema", + "missing node/link endpoint" + ], + "recovery": [ + "rejected graph leaves baseline unchanged", + "undo/redo graph override", + "save/reopen", + "deterministic second run" + ], + "commands": [ + "cmake --build build_web_blender6 --target web_engine -- -j8", + "npm --prefix web run test:geometry-node-allowlist", + "npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-geometry-nodes-production.spec.ts", + "npm --prefix web run test:geometry-node-field-budget", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1126-000", + "phase": "1126", + "title": "verify_grease_pencil_viewport_module", + "kind": "module", + "owner": "DRAWING", + "dependsOn": [ + "WBV2-P1125-000" + ], + "parityId": "GREASE_PENCIL_VIEWPORT", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-grease_pencil_viewport", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1126-000.md", + "behavior": "Verify Grease Pencil 2D/3D selection and marquee integration on both viewport backends using an isolated Chromium port.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "2D and 3D selection revisions converge", + "main-thread and Offscreen marquee are exact", + "stale/foreign selection cases remain fail-closed", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "GREASE_PENCIL_VIEWPORT", + "sourceBacked": true, + "capabilities": [ + "CAP-GREASE-PENCIL-SELECTION-REVISION", + "CAP-GREASE-PENCIL-MARQUEE-MAIN", + "CAP-GREASE-PENCIL-MARQUEE-OFFSCREEN" + ], + "sourcePaths": [ + "web/protocol/grease-pencil-selection.ts", + "web/protocol/grease-pencil-marquee.ts", + "web/app/src/app/App.tsx", + "web/app/src/three-adapter/grease-pencil.ts", + "web/app/src/three-adapter/viewport.ts", + "web/app/src/three-adapter/offscreen-viewport.ts", + "web/app/src/workers/viewport-render.worker.ts" + ], + "reuseReceipts": [], + "positive": [ + "2D canvas selection revision", + "main-thread 3D marquee selection", + "OffscreenCanvas 3D marquee selection" + ], + "negative": [ + "stale selection revision", + "foreign drawing identity", + "duplicate or forged point candidate" + ], + "recovery": [ + "selection convergence across backends", + "worker viewport restart", + "deterministic repeated marquee", + "preserve Main revision" + ], + "commands": [ + "WEB_TEST_PORT=5331 npm --prefix web run test:e2e -- --workers=1 tests/e2e/grease-pencil-selection.spec.ts tests/e2e/grease-pencil-marquee.spec.ts", + "node --test web/tests/unit/grease-pencil-selection.test.mjs web/tests/unit/grease-pencil-marquee.test.mjs", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1127-000", + "phase": "1127", + "title": "verify_tracking_mask_module", + "kind": "module", + "owner": "TRACKING", + "dependsOn": [ + "WBV2-P1126-000" + ], + "parityId": "TRACKING_MASK", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-tracking_mask", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1127-000.md", + "behavior": "Verify Mask reader, editable point raycast/marquee and tracking capability gates through Chromium.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Mask reader and interaction evidence is proven", + "negative solve/resource cases are proven", + "Chromium stable IDs and recovery receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "TRACKING_MASK", + "sourceBacked": true, + "capabilities": [ + "CAP-MASK-MAIN-READER", + "CAP-MASK-POINT-RAYCAST", + "CAP-TRACKING-SOLVE-GATE" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/tracking-mask.ts", + "web/protocol/scene-ir.ts", + "web/app/src/tracking/MaskSelection.ts", + "web/app/src/app/App.tsx", + "web/app/src/three-adapter/viewport.ts", + "web/app/src/three-adapter/offscreen-viewport.ts", + "web/tests/e2e/smoke.spec.ts" + ], + "reuseReceipts": [], + "positive": [ + "Mask layers and splines reader", + "editable Mask point raycast", + "N-022 tracking marker/mask gate" + ], + "negative": [ + "foreign mask point identity", + "missing resource binding", + "camera solve unavailable" + ], + "recovery": [ + "main/offscreen marquee parity", + "worker restart", + "deterministic stable IDs", + "preserve source Main on blocked solve" + ], + "commands": [ + "npm --prefix web run test:mask-main-reader", + "WEB_TEST_PORT=5340 npm --prefix web run test:e2e -- --workers=1 tests/e2e/smoke.spec.ts -g \"N-022 tracking|real Blender 5.2 Mask\"", + "npm --prefix web run typecheck" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1128-000", + "phase": "1128", + "title": "verify_ffmpeg_movie_codec_module", + "kind": "module", + "owner": "MEDIA", + "dependsOn": [ + "WBV2-P1127-000" + ], + "parityId": "SEQUENCER_MOVIE_CODEC", + "implementationClass": "LOCAL_BOUNDED", + "parallelGroup": "module-sequencer_movie_codec", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1128-000.md", + "behavior": "Use a local ffmpeg.wasm Worker fallback for movie probing and proxy-frame extraction when Chromium HTML media decoding is unavailable.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and core-resource hashes are bound", + "positive MP4 probe and RGBA frame are proven", + "corrupt and source-identity cases are rejected", + "AbortSignal cancellation leaves no live Worker", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "SEQUENCER_MOVIE_CODEC", + "sourceBacked": true, + "capabilities": [ + "CAP-FFMPEG-WASM-MOVIE-PROBE", + "CAP-FFMPEG-WASM-PROXY-FRAME", + "CAP-MOVIE-CODEC-RECOVERY" + ], + "sourcePaths": [ + "web/package.json", + "web/package-lock.json", + "web/protocol/sequencer.ts", + "web/app/src/sequencer/SequencerCodecProbe.ts", + "web/app/src/sequencer/FFmpegMovieProbe.ts", + "web/app/src/sequencer/ffmpeg-movie-probe.worker.ts", + "web/app/src/sequencer/SequencerMediaProxyCache.ts", + "web/app/src/vendor/ffmpeg/ffmpeg-core.js", + "web/app/src/vendor/ffmpeg/ffmpeg-core.wasm", + "web/app/public/vendor/ffmpeg/ffmpeg-core.js", + "web/app/public/vendor/ffmpeg/ffmpeg-core.wasm", + "third_party/ffmpeg.wasm/package.json", + "third_party/ffmpeg.wasm/README.md", + "web/tests/e2e/ffmpeg-movie-probe-production.spec.ts" + ], + "reuseReceipts": [], + "positive": [ + "browser decode fallback to ffmpeg.wasm", + "16x16 MP4 metadata probe", + "8x8 RGBA proxy frame extraction" + ], + "negative": [ + "corrupt movie payload", + "source SHA mismatch", + "ffmpeg runtime unavailable" + ], + "recovery": [ + "AbortSignal cancellation", + "Worker termination after response", + "cache manifest identity binding", + "deterministic repeated probe" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5342 npm --prefix web run test:e2e -- --workers=1 tests/e2e/ffmpeg-movie-probe-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1129-000", + "phase": "1129", + "title": "authorize_scene_settings_module", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1128-000" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1129", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1129-000.md", + "behavior": "Authorize one source-backed Core Scene Graph settings module after the terminal P1128 module epoch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1128 evidence remains hash-bound", + "existing receipts are reused", + "inventory remains immutable", + "one source-backed module is active" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ] + }, + { + "id": "WBV2-P1129-001", + "phase": "1129", + "title": "verify_scene_settings_module", + "kind": "module", + "owner": "CORE_SCENE", + "dependsOn": [ + "WBV2-P1129-000" + ], + "parityId": "CORE_SCENE_GRAPH_SETTINGS", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-core_scene_graph_settings", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1129-001.md", + "behavior": "Verify the existing Blender Main scene compositor, performance and sampling setting transactions as one aggregate module.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutations are proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen receipts are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "CORE_SCENE_GRAPH_SETTINGS", + "sourceBacked": true, + "capabilities": [ + "CAP-SCENE-COMPOSITOR-SETTINGS", + "CAP-SCENE-PERFORMANCE-SETTINGS", + "CAP-SCENE-SAMPLING-SETTINGS" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/tests/e2e/wbv2-scene-settings-production.spec.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P65-002/manifest.json", + "report": "tests/golden/WBV2-P65-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P66-002/manifest.json", + "report": "tests/golden/WBV2-P66-002/implementation-report.json" + }, + { + "manifest": "tests/golden/WBV2-P67-002/manifest.json", + "report": "tests/golden/WBV2-P67-002/implementation-report.json" + } + ], + "positive": [ + "compositor device/precision mutation", + "performance thread/persistence mutation", + "sampling filter/dither mutation" + ], + "negative": [ + "invalid sampling range", + "unknown scene target", + "malformed property set" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "deterministic scene settings snapshot" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5344 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-scene-settings-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1130-000", + "phase": "1130", + "title": "authorize_editor_view2d_module", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1129-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1130", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1130-000.md", + "behavior": "Authorize one source-backed UI editor View2D reader/protocol module after the P1129 scene settings module.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1129 evidence remains hash-bound", + "P1102 editor workflow source remains unchanged", + "inventory remains immutable", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1130-001", + "phase": "1130", + "title": "verify_editor_view2d_module", + "kind": "module", + "owner": "EDITOR", + "dependsOn": [ + "WBV2-P1130-000" + ], + "parityId": "UI_EDITOR_VIEW2D_STATE", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-ui_editor_view2d_state", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1130-001.md", + "behavior": "Preserve Blender Graph/Dope Sheet View2D cur and mask state through the Web editor protocol without changing the existing editor workflow parser.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive reader state is proven", + "negative no-publish and recovery are proven", + "Chromium and save/reopen compatibility are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "UI_EDITOR_VIEW2D_STATE", + "sourceBacked": true, + "capabilities": [ + "CAP-EDITOR-VIEW2D-CUR", + "CAP-EDITOR-VIEW2D-MASK", + "CAP-EDITOR-VIEW2D-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/editor-view2d.ts", + "web/app/src/workers/editor-view2d-test.worker.ts", + "web/app/src/app/App.tsx", + "web/tests/e2e/ui-editor-view2d-production.spec.ts" + ], + "reuseReceipts": [], + "positive": [ + "Graph main-region View2D cur retention", + "Graph main-region pixel mask retention", + "reader/protocol exact state" + ], + "negative": [ + "inverted View2D bounds", + "malformed mask range", + "missing View2D payload" + ], + "recovery": [ + "immutable base editor workflow", + "worker termination", + "deterministic repeated parse", + "save/reopen reader compatibility" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5346 npm --prefix web run test:e2e -- --workers=1 tests/e2e/ui-editor-view2d-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1131-000", + "phase": "1131", + "title": "authorize_curve_topology_module", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1130-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1131", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1131-000.md", + "behavior": "Authorize one source-backed Curve topology editor module after the P1130 View2D module.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1130 evidence remains hash-bound", + "Curve topology source and protocol are present", + "inventory remains immutable", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1131-001", + "phase": "1131", + "title": "verify_curve_topology_module", + "kind": "module", + "owner": "EDITOR", + "dependsOn": [ + "WBV2-P1131-000" + ], + "parityId": "CURVE_TOPOLOGY_EDITOR", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-curve_topology_editor", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1131-001.md", + "behavior": "Verify the Blender Curve TOGGLE_CYCLIC topology transaction through the existing Main, protocol, Worker and frontend path.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "CURVE_TOPOLOGY_EDITOR", + "sourceBacked": true, + "capabilities": [ + "CAP-CURVE-TOPOLOGY-TOGGLE-CYCLIC", + "CAP-CURVE-TOPOLOGY-GATE", + "CAP-CURVE-TOPOLOGY-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/editors/curve/curve_ops.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "web/protocol/curve-topology-editor.ts", + "web/app/src/workers/curve-topology-contract-test.worker.ts", + "web/app/src/app/App.tsx", + "web/tests/e2e/curve-topology-contract.spec.ts", + "web/tests/e2e/curve-topology-operator.spec.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "positive": [ + "TOGGLE_CYCLIC Main mutation", + "operator gate exposes only verified capability", + "save/reopen preserves cyclic spline state" + ], + "negative": [ + "unknown curve operator", + "stale revision claim", + "selection and payload budget overflow" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "worker termination and deterministic contract parse" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5347 npm --prefix web run test:e2e -- --workers=1 tests/e2e/curve-topology-contract.spec.ts tests/e2e/curve-topology-operator.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1132-000", + "phase": "1132", + "title": "authorize_curve_handle_module", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1131-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1132", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1132-000.md", + "behavior": "Authorize one source-backed Curve handle gizmo module after the P1131 topology module.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1131 evidence remains hash-bound", + "Curve handle source and protocol are present", + "inventory remains immutable", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1132-001", + "phase": "1132", + "title": "verify_curve_handle_module", + "kind": "module", + "owner": "EDITOR", + "dependsOn": [ + "WBV2-P1132-000" + ], + "parityId": "CURVE_HANDLE_GIZMO", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-curve_handle_gizmo", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1132-001.md", + "behavior": "Verify Curve handle position edits through Blender Main, protocol, Worker, renderer preview and frontend gizmo.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "CURVE_HANDLE_GIZMO", + "sourceBacked": true, + "capabilities": [ + "CAP-CURVE-HANDLE-MAIN", + "CAP-CURVE-HANDLE-GIZMO-PREVIEW", + "CAP-CURVE-HANDLE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "web/protocol/nonmesh-interaction.ts", + "web/app/src/workers/nonmesh-interaction-test.worker.ts", + "web/app/src/app/App.tsx", + "web/app/src/three-adapter/nonmesh.ts", + "web/app/src/three-adapter/viewport.ts", + "web/app/src/three-adapter/offscreen-viewport.ts", + "web/tests/e2e/wbv2-curve-handle-production.spec.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "positive": [ + "Curve handle position Main mutation", + "local handle gizmo preview", + "save/reopen preserves handle state" + ], + "negative": [ + "invalid handle identity", + "stale base revision", + "malformed handle position" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "Worker termination and deterministic preview" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5348 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-curve-handle-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1133-000", + "phase": "1133", + "title": "authorize_curve_splines_module", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1132-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1133", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1133-000.md", + "behavior": "Authorize one source-backed Curve spline transaction module after the P1132 handle module.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1132 evidence remains hash-bound", + "Curve spline source and protocol are present", + "inventory remains immutable", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1133-001", + "phase": "1133", + "title": "verify_curve_splines_module", + "kind": "module", + "owner": "EDITOR", + "dependsOn": [ + "WBV2-P1133-000" + ], + "parityId": "CURVE_SPLINES_TRANSACTION", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-curve_splines_transaction", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1133-001.md", + "behavior": "Verify complete Curve spline replacement through Blender Main, protocol, Worker and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "CURVE_SPLINES_TRANSACTION", + "sourceBacked": true, + "capabilities": [ + "CAP-CURVE-SPLINES-MAIN", + "CAP-CURVE-SPLINES-RECOVERY", + "CAP-CURVE-SPLINES-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/tests/e2e/wbv2-curve-splines-production.spec.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "positive": [ + "complete Curve spline Main transaction", + "POLY/BEZIER descriptor retention", + "save/reopen preserves spline state" + ], + "negative": [ + "invalid spline offsets", + "stale base revision", + "mismatched handle payload" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "deterministic binary-geometry transaction" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5349 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-curve-splines-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1134-000", + "phase": "1134", + "title": "authorize_surface_topology_module", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1133-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1134", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1134-000.md", + "behavior": "Authorize one source-backed Surface topology transaction module after the P1133 Curve spline module.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1133 evidence remains hash-bound", + "Surface topology source and protocol are present", + "inventory remains immutable", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1134-001", + "phase": "1134", + "title": "verify_surface_topology_module", + "kind": "module", + "owner": "GEOMETRY", + "dependsOn": [ + "WBV2-P1134-000" + ], + "parityId": "SURFACE_TOPOLOGY_TRANSACTION", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-surface_topology_transaction", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1134-001.md", + "behavior": "Verify Surface NURBS topology replacement through Blender Main, protocol, Worker and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "SURFACE_TOPOLOGY_TRANSACTION", + "sourceBacked": true, + "capabilities": [ + "CAP-SURFACE-TOPOLOGY-MAIN", + "CAP-SURFACE-NURBS-BOUNDS", + "CAP-SURFACE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/tests/e2e/wbv2-surface-topology-production.spec.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "positive": [ + "Surface topology Main transaction", + "NURBS dimensions and weights retention", + "save/reopen preserves surface state" + ], + "negative": [ + "invalid surface dimensions", + "stale base revision", + "control grid budget mismatch" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "deterministic surface transaction" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5350 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-surface-topology-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1135-000", + "phase": "1135", + "title": "authorize_font_body_module", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1134-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1135", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1135-000.md", + "behavior": "Authorize one source-backed Font body transaction module after the P1134 Surface topology module.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1134 evidence remains hash-bound", + "Font body source and protocol are present", + "inventory remains immutable", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1135-001", + "phase": "1135", + "title": "verify_font_body_module", + "kind": "module", + "owner": "GEOMETRY", + "dependsOn": [ + "WBV2-P1135-000" + ], + "parityId": "FONT_BODY_TRANSACTION", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-font_body_transaction", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1135-001.md", + "behavior": "Verify Font body replacement through Blender Main, protocol, Worker and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "FONT_BODY_TRANSACTION", + "sourceBacked": true, + "capabilities": [ + "CAP-FONT-BODY-MAIN", + "CAP-FONT-BODY-RECOVERY", + "CAP-FONT-BODY-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/tests/e2e/wbv2-font-body-production.spec.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "positive": [ + "Font body Main mutation", + "UTF-8 text retention", + "save/reopen preserves text" + ], + "negative": [ + "unknown Font data ID", + "body byte budget overflow", + "malformed body payload" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "Worker termination and deterministic text state" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5351 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-font-body-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1136-000", + "phase": "1136", + "title": "authorize_font_properties_module", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1135-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1136", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1136-000.md", + "behavior": "Authorize one source-backed Font properties transaction module after the P1135 Font body module.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1135 evidence remains hash-bound", + "Font property source and protocol are present", + "inventory remains immutable", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1136-001", + "phase": "1136", + "title": "verify_font_properties_module", + "kind": "module", + "owner": "GEOMETRY", + "dependsOn": [ + "WBV2-P1136-000" + ], + "parityId": "FONT_PROPERTIES_TRANSACTION", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-font_properties_transaction", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1136-001.md", + "behavior": "Verify Font property replacement through Blender Main, protocol, Worker and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "FONT_PROPERTIES_TRANSACTION", + "sourceBacked": true, + "capabilities": [ + "CAP-FONT-PROPERTIES-MAIN", + "CAP-FONT-PROPERTIES-RECOVERY", + "CAP-FONT-PROPERTIES-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/tests/e2e/wbv2-font-properties-production.spec.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "positive": [ + "Font property Main mutation", + "bounded alignment/extrude fields", + "save/reopen preserves properties" + ], + "negative": [ + "unknown Font data ID", + "invalid alignment enum", + "out-of-range numeric property" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "Worker termination and deterministic property state" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5352 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-font-properties-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1137-000", + "phase": "1137", + "title": "authorize_metaball_elements_module", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1136-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1137", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1137-000.md", + "behavior": "Authorize one source-backed Metaball element transaction module after the P1136 Font properties module.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1136 evidence remains hash-bound", + "Metaball element source and protocol are present", + "inventory remains immutable", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1137-001", + "phase": "1137", + "title": "verify_metaball_elements_module", + "kind": "module", + "owner": "GEOMETRY", + "dependsOn": [ + "WBV2-P1137-000" + ], + "parityId": "METABALL_ELEMENTS_TRANSACTION", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-metaball_elements_transaction", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1137-001.md", + "behavior": "Verify Metaball element replacement through Blender Main, protocol, Worker and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "METABALL_ELEMENTS_TRANSACTION", + "sourceBacked": true, + "capabilities": [ + "CAP-METABALL-ELEMENTS-MAIN", + "CAP-METABALL-ELEMENTS-RECOVERY", + "CAP-METABALL-ELEMENTS-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/tests/e2e/wbv2-metaball-elements-production.spec.ts" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1101-000/manifest.json", + "report": "tests/golden/WBV2-P1101-000/module-receipt.json" + } + ], + "positive": [ + "Metaball element Main mutation", + "bounded position/radius/scale retention", + "save/reopen preserves elements" + ], + "negative": [ + "unknown Metaball data ID", + "invalid radius", + "element count topology mismatch" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "Worker termination and deterministic element state" + ], + "commands": [ + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5353 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-metaball-elements-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1138-000", + "phase": "1138", + "title": "authorize_text_source_module", + "kind": "enabling", + "owner": "SCRIPTING", + "dependsOn": [ + "WBV2-P1137-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1138", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1138-000.md", + "behavior": "Authorize a source-backed Text datablock mutation after the P1137 Metaball module.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1137 evidence remains hash-bound", + "ID_TXT is registered for WITH_WEB", + "inventory remains source-derived", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1138-001", + "phase": "1138", + "title": "verify_text_source_module", + "kind": "module", + "owner": "SCRIPTING", + "dependsOn": [ + "WBV2-P1138-000" + ], + "parityId": "TEXT_SOURCE_TRANSACTION", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-text_source_transaction", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1138-001.md", + "behavior": "Verify Text source replacement through Blender Main, protocol, Worker and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "TEXT_SOURCE_TRANSACTION", + "sourceBacked": true, + "capabilities": [ + "CAP-TEXT-SOURCE-MAIN", + "CAP-TEXT-SOURCE-RECOVERY", + "CAP-TEXT-SOURCE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/blenkernel/intern/idtype.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/tests/e2e/wbv2-text-source-production.spec.ts", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1137-001/manifest.json", + "report": "tests/golden/WBV2-P1137-001/module-receipt.json" + } + ], + "positive": [ + "Text source Main mutation", + "ID_TXT registration in WITH_WEB", + "save/reopen preserves source" + ], + "negative": [ + "unknown Text data ID", + "source over 1 MiB", + "linked/read-only Text" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "Worker termination and deterministic source state" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5353 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-text-source-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1139-000", + "phase": "1139", + "title": "authorize_texture_properties_module", + "kind": "enabling", + "owner": "TEXTURE", + "dependsOn": [ + "WBV2-P1138-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1139", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1139-000.md", + "behavior": "Authorize a source-backed Texture property mutation module after P1138 Text.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1138 evidence remains hash-bound", + "ID_TE is registered for WITH_WEB", + "inventory remains source-derived", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1139-001", + "phase": "1139", + "title": "verify_texture_properties_module", + "kind": "module", + "owner": "TEXTURE", + "dependsOn": [ + "WBV2-P1139-000" + ], + "parityId": "TEXTURE_PROPERTIES_TRANSACTION", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-texture_properties_transaction", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1139-001.md", + "behavior": "Verify Texture property replacement through Blender Main, protocol, Worker and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main mutation is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "TEXTURE_PROPERTIES_TRANSACTION", + "sourceBacked": true, + "capabilities": [ + "CAP-TEXTURE-PROPERTIES-MAIN", + "CAP-TEXTURE-PROPERTIES-RECOVERY", + "CAP-TEXTURE-PROPERTIES-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/blenkernel/intern/idtype.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", + "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", + "web/protocol/web-engine.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/app/App.tsx", + "web/tests/e2e/wbv2-texture-properties-production.spec.ts", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1138-001/manifest.json", + "report": "tests/golden/WBV2-P1138-001/module-receipt.json" + } + ], + "positive": [ + "Texture property Main mutation", + "ID_TE registration in WITH_WEB", + "save/reopen preserves properties" + ], + "negative": [ + "unknown Texture data ID", + "noise depth outside Blender bounds", + "non-finite numeric property" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "Worker termination and deterministic property state" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5353 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-texture-properties-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1140-000", + "phase": "1140", + "title": "authorize_action_group_reader_module", + "kind": "enabling", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1139-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1140", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1140-000.md", + "behavior": "Authorize a source-backed ActionGroup reader and recovery module after P1139 Texture.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1139 evidence remains hash-bound", + "ActionGroup has explicit Blender source mapping", + "inventory remains source-derived", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1140-001", + "phase": "1140", + "title": "verify_action_group_reader_module", + "kind": "module", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1140-000" + ], + "parityId": "ACTION_GROUP_READER", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-action_group_reader", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1140-001.md", + "behavior": "Verify ActionGroup metadata through Blender Main reader, protocol and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main reader is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "ACTION_GROUP_READER", + "sourceBacked": true, + "capabilities": [ + "CAP-ACTION-GROUP-READER", + "CAP-ACTION-GROUP-RECOVERY", + "CAP-ACTION-GROUP-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/scene-ir.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/tests/e2e/wbv2-action-group-reader-production.spec.ts", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1112-000/manifest.json", + "report": "tests/golden/WBV2-P1112-000/module-receipt.json" + } + ], + "positive": [ + "ActionGroup Main reader exposes group and expanded metadata", + "three grouped location F-Curves remain grouped", + "save/reopen preserves group metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "missing animation target is fail-closed", + "unsupported group payload is not synthesized" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "worker termination and deterministic group state" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5356 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-action-group-reader-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1141-000", + "phase": "1141", + "title": "authorize_action_pose_markers_module", + "kind": "enabling", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1140-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1141", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1141-000.md", + "behavior": "Authorize a source-backed ActionPoseMarkers reader and recovery module after P1140.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1140 evidence remains hash-bound", + "ActionPoseMarkers has explicit Blender source mapping", + "inventory remains source-derived", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1141-001", + "phase": "1141", + "title": "verify_action_pose_markers_reader_module", + "kind": "module", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1141-000" + ], + "parityId": "ACTION_POSE_MARKERS_READER", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-action_pose_markers_reader", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1141-001.md", + "behavior": "Verify ActionPoseMarkers metadata through Blender Main reader, protocol and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main reader is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "ACTION_POSE_MARKERS_READER", + "sourceBacked": true, + "capabilities": [ + "CAP-ACTION-POSE-MARKERS-READER", + "CAP-ACTION-POSE-MARKERS-RECOVERY", + "CAP-ACTION-POSE-MARKERS-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/scene-ir.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/tests/e2e/wbv2-action-pose-markers-production.spec.ts", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1140-001/manifest.json", + "report": "tests/golden/WBV2-P1140-001/module-receipt.json" + } + ], + "positive": [ + "ActionPoseMarkers Main reader exposes marker names and frames", + "three Blender pose markers remain ordered", + "save/reopen preserves marker metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "missing animation target is fail-closed", + "non-finite marker frame is not synthesized" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "worker termination and deterministic marker state" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5359 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-action-pose-markers-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1142-000", + "phase": "1142", + "title": "authorize_fcurve_sample_reader_module", + "kind": "enabling", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1141-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1142", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1142-000.md", + "behavior": "Authorize a source-backed FCurveSample reader and recovery module after P1141.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1141 evidence remains hash-bound", + "FCurveSample has explicit Blender source mapping", + "inventory remains source-derived", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1142-001", + "phase": "1142", + "title": "verify_fcurve_sample_reader_module", + "kind": "module", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1142-000" + ], + "parityId": "FCURVE_SAMPLE_READER", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-fcurve_sample_reader", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1142-001.md", + "behavior": "Verify FCurveSample data through Blender Main reader, protocol and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main reader is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "FCURVE_SAMPLE_READER", + "sourceBacked": true, + "capabilities": [ + "CAP-FCURVE-SAMPLE-READER", + "CAP-FCURVE-SAMPLE-RECOVERY", + "CAP-FCURVE-SAMPLE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/scene-ir.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/tests/e2e/wbv2-fcurve-sample-production.spec.ts", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1141-001/manifest.json", + "report": "tests/golden/WBV2-P1141-001/module-receipt.json" + } + ], + "positive": [ + "FCurveSample Main reader exposes sampled source and values", + "four native FPoint samples remain ordered", + "save/reopen preserves sampled data" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "missing sampled payload is fail-closed", + "non-finite sampled value is not synthesized" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "worker termination and deterministic sampled state" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5365 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-fcurve-sample-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1143-000", + "phase": "1143", + "title": "authorize_fcurve_modifier_reader_module", + "kind": "enabling", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1142-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1143", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1143-000.md", + "behavior": "Authorize a source-backed FCurve modifier reader and recovery module after P1142.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1142 evidence remains hash-bound", + "FCurveModifiers has explicit Blender source mapping", + "inventory remains source-derived", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1143-001", + "phase": "1143", + "title": "verify_fcurve_modifier_reader_module", + "kind": "module", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1143-000" + ], + "parityId": "FCURVE_MODIFIER_READER", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-fcurve_modifier_reader", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1143-001.md", + "behavior": "Verify FCurve modifier metadata through Blender Main reader, protocol and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main reader is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "FCURVE_MODIFIER_READER", + "sourceBacked": true, + "capabilities": [ + "CAP-FCURVE-MODIFIER-READER", + "CAP-FCURVE-MODIFIER-RECOVERY", + "CAP-FCURVE-MODIFIER-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/scene-ir.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/tests/e2e/wbv2-fcurve-modifier-production.spec.ts", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1142-001/manifest.json", + "report": "tests/golden/WBV2-P1142-001/module-receipt.json" + } + ], + "positive": [ + "FCurveModifiers Main reader exposes native modifier stack", + "FModifierCycles preserves type/name/flags/influence", + "save/reopen preserves modifier metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "missing modifier payload is fail-closed", + "unsupported modifier type is not synthesized" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "worker termination and deterministic modifier state" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5368 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-fcurve-modifier-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1144-000", + "phase": "1144", + "title": "authorize_driver_reader_module", + "kind": "enabling", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1143-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1144", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1144-000.md", + "behavior": "Authorize a source-backed Driver reader and recovery module after P1143.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "P1143 evidence remains hash-bound", + "Driver has explicit Blender source mapping", + "inventory remains source-derived", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1144-001", + "phase": "1144", + "title": "verify_driver_reader_module", + "kind": "module", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1144-000" + ], + "parityId": "DRIVER_READER", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-driver_reader", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1144-001.md", + "behavior": "Verify Driver metadata through Blender Main reader, protocol and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main reader is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "DRIVER_READER", + "sourceBacked": true, + "capabilities": [ + "CAP-DRIVER-READER", + "CAP-DRIVER-RECOVERY", + "CAP-DRIVER-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/protocol/scene-ir.ts", + "web/app/src/workers/web-engine.worker.ts", + "web/app/src/engine-client/WebEngineClient.ts", + "web/tests/e2e/wbv2-driver-reader-production.spec.ts", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1143-001/manifest.json", + "report": "tests/golden/WBV2-P1143-001/module-receipt.json" + } + ], + "positive": [ + "AnimData driver list is read from Blender Main", + "Driver preserves scripted expression and variables", + "save/reopen preserves driver metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "missing driver target is fail-closed", + "non-finite driver influence is not synthesized" + ], + "recovery": [ + "undo", + "redo", + "save/reopen", + "worker termination and deterministic driver state" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-driver-reader-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1145-000", + "phase": "1145", + "title": "authorize_corrective_smooth_reader_module", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1144-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1145", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1145-000.md", + "behavior": "Authorize a source-backed Corrective Smooth reader/recovery module after the Driver reader.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "Corrective Smooth has explicit Blender source mapping", + "inventory remains source-derived", + "one source-backed module is active" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1145-001", + "phase": "1145", + "title": "verify_corrective_smooth_reader_module", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1145-000" + ], + "parityId": "CORRECTIVE_SMOOTH_READER", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-corrective_smooth_reader", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1145-001.md", + "behavior": "Verify Corrective Smooth modifier type and RNA metadata through Blender Main reader, protocol and Chromium recovery.", + "outputs": [ + "module receipt", + "negative matrix", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "positive Main reader is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact", + "full-family parity remains explicit" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "CORRECTIVE_SMOOTH_READER", + "sourceBacked": true, + "capabilities": [ + "CAP-CORRECTIVE-SMOOTH-READER", + "CAP-CORRECTIVE-SMOOTH-RECOVERY", + "CAP-CORRECTIVE-SMOOTH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_correctivesmooth.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-corrective-smooth-reader-production.spec.ts", + "tests/files/web/modifier_corrective_smooth_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "positive": [ + "Corrective Smooth type is read from Blender Main", + "RNA metadata is preserved", + "save/reopen preserves modifier metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported modifier data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-corrective-smooth-reader-production.spec.ts" + ], + "fullFamilyParity": false + } + }, + { + "id": "WBV2-P1146-000", + "phase": "1146", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1145-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1146", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1146-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1146-001", + "phase": "1146", + "title": "verify modifier reader batch", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1146-000" + ], + "parityId": "MODIFIER_READER_BATCH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_reader_batch", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1146-001.md", + "behavior": "Verify the MODIFIER_READER_BATCH batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_READER_BATCH", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH-READER", + "CAP-MODIFIER_READER_BATCH-RECOVERY", + "CAP-MODIFIER_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_datatransfer.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_dynamicpaint.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_explode.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_fluid.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_fluid.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-production.spec.ts", + "tests/files/web/modifier_reader_batch_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "positive": [ + "MOD_datatransfer type is read from Blender Main", + "MOD_dynamicpaint type is read from Blender Main", + "MOD_explode type is read from Blender Main", + "MOD_fluid type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-reader-batch-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1146-001/modifier-reader-batch-production.json" + ], + "coverageBindings": [ + "modifier-source:MOD_datatransfer", + "modifier-source:MOD_dynamicpaint", + "modifier-source:MOD_explode", + "modifier-source:MOD_fluid", + "rna-struct:DataTransferModifier", + "rna-struct:DynamicPaintModifier", + "rna-struct:ExplodeModifier", + "rna-struct:FluidModifier", + "rna-struct:FluidDomainSettings" + ] + } + }, + { + "id": "WBV2-P1147-000", + "phase": "1147", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1146-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1147", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1147-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1147-001", + "phase": "1147", + "title": "verify modifier reader batch two", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1147-000" + ], + "parityId": "MODIFIER_READER_BATCH_TWO", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_reader_batch_two", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1147-001.md", + "behavior": "Verify the MODIFIER_READER_BATCH_TWO batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_READER_BATCH_TWO", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH_TWO-READER", + "CAP-MODIFIER_READER_BATCH_TWO-RECOVERY", + "CAP-MODIFIER_READER_BATCH_TWO-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_laplaciandeform.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_laplaciansmooth.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_mask.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_shrinkwrap.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts", + "tests/files/web/modifier_reader_batch_two_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "positive": [ + "MOD_laplaciandeform type is read from Blender Main", + "MOD_laplaciansmooth type is read from Blender Main", + "MOD_mask type is read from Blender Main", + "MOD_mesh_to_volume type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1147-001/modifier-reader-batch-production.json" + ], + "coverageBindings": [ + "modifier-source:MOD_laplaciandeform", + "modifier-source:MOD_laplaciansmooth", + "modifier-source:MOD_mask", + "modifier-source:MOD_shrinkwrap", + "rna-struct:LaplacianDeformModifier", + "rna-struct:LaplacianSmoothModifier", + "rna-struct:MaskModifier", + "rna-struct:ShrinkwrapModifier" + ] + } + }, + { + "id": "WBV2-P1148-000", + "phase": "1148", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1147-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1148", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1148-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1148-001", + "phase": "1148", + "title": "verify modifier reader batch three", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1148-000" + ], + "parityId": "MODIFIER_READER_BATCH_THREE", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_reader_batch_three", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1148-001.md", + "behavior": "Verify the MODIFIER_READER_BATCH_THREE batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_READER_BATCH_THREE", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH_THREE-READER", + "CAP-MODIFIER_READER_BATCH_THREE-RECOVERY", + "CAP-MODIFIER_READER_BATCH_THREE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_remesh.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_skin.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weighted_normal.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_warp.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts", + "tests/files/web/modifier_reader_batch_three_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "positive": [ + "MOD_remesh type is read from Blender Main", + "MOD_skin type is read from Blender Main", + "MOD_weighted_normal type is read from Blender Main", + "MOD_warp type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1148-001 WBV2_BATCH_FIXTURE=tests/files/web/modifier_reader_batch_three_scene.blend WBV2_BATCH_TYPES='[\"REMESH\",\"SKIN\",\"WEIGHTED_NORMAL\",\"WARP\"]' WBV2_BATCH_UNITS='[\"modifier-source:MOD_remesh\",\"modifier-source:MOD_skin\",\"modifier-source:MOD_weighted_normal\",\"modifier-source:MOD_warp\",\"rna-struct:RemeshModifier\",\"rna-struct:SkinModifier\",\"rna-struct:WeightedNormalModifier\",\"rna-struct:WarpModifier\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1148-001/modifier-reader-batch-production.json" + ], + "coverageBindings": [ + "modifier-source:MOD_remesh", + "modifier-source:MOD_skin", + "modifier-source:MOD_weighted_normal", + "modifier-source:MOD_warp", + "rna-struct:RemeshModifier", + "rna-struct:SkinModifier", + "rna-struct:WeightedNormalModifier", + "rna-struct:WarpModifier" + ] + } + }, + { + "id": "WBV2-P1149-000", + "phase": "1149", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1148-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1149", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1149-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1149-001", + "phase": "1149", + "title": "verify modifier reader batch four", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1149-000" + ], + "parityId": "MODIFIER_READER_BATCH_FOUR", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_reader_batch_four", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1149-001.md", + "behavior": "Verify the MODIFIER_READER_BATCH_FOUR batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_READER_BATCH_FOUR", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH_FOUR-READER", + "CAP-MODIFIER_READER_BATCH_FOUR-RECOVERY", + "CAP-MODIFIER_READER_BATCH_FOUR-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_uvproject.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_uvwarp.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_normal_edit.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_volume_to_mesh.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts", + "tests/files/web/modifier_reader_batch_four_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "positive": [ + "MOD_uvproject type is read from Blender Main", + "MOD_uvwarp type is read from Blender Main", + "MOD_volume_displace type is read from Blender Main", + "MOD_volume_to_mesh type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1149-001 WBV2_BATCH_FIXTURE=tests/files/web/modifier_reader_batch_four_scene.blend WBV2_BATCH_TYPES='[\"UV_PROJECT\",\"UV_WARP\",\"NORMAL_EDIT\",\"VOLUME_TO_MESH\"]' WBV2_BATCH_UNITS='[\"modifier-source:MOD_uvproject\",\"modifier-source:MOD_uvwarp\",\"modifier-source:MOD_normal_edit\",\"modifier-source:MOD_volume_to_mesh\",\"rna-struct:UVProjectModifier\",\"rna-struct:UVWarpModifier\",\"rna-struct:NormalEditModifier\",\"rna-struct:VolumeToMeshModifier\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1149-001/modifier-reader-batch-production.json" + ], + "coverageBindings": [ + "modifier-source:MOD_uvproject", + "modifier-source:MOD_uvwarp", + "modifier-source:MOD_normal_edit", + "modifier-source:MOD_volume_to_mesh", + "rna-struct:UVProjectModifier", + "rna-struct:UVWarpModifier", + "rna-struct:NormalEditModifier", + "rna-struct:VolumeToMeshModifier" + ] + } + }, + { + "id": "WBV2-P1150-000", + "phase": "1150", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1149-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1150", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1150-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1150-001", + "phase": "1150", + "title": "verify modifier reader batch five", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1150-000" + ], + "parityId": "MODIFIER_READER_BATCH_FIVE", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_reader_batch_five", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1150-001.md", + "behavior": "Verify the MODIFIER_READER_BATCH_FIVE batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_READER_BATCH_FIVE", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH_FIVE-READER", + "CAP-MODIFIER_READER_BATCH_FIVE-RECOVERY", + "CAP-MODIFIER_READER_BATCH_FIVE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshsequencecache.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_multires.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_ocean.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts", + "tests/files/web/modifier_reader_batch_five_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "positive": [ + "MOD_meshcache type is read from Blender Main", + "MOD_meshsequencecache type is read from Blender Main", + "MOD_multires type is read from Blender Main", + "MOD_ocean type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1150-001 WBV2_BATCH_FIXTURE=tests/files/web/modifier_reader_batch_five_scene.blend WBV2_BATCH_TYPES='[\"MESH_CACHE\",\"MESH_SEQUENCE_CACHE\",\"MULTIRES\",\"OCEAN\"]' WBV2_BATCH_UNITS='[\"modifier-source:MOD_meshcache\",\"modifier-source:MOD_meshsequencecache\",\"modifier-source:MOD_multires\",\"modifier-source:MOD_ocean\",\"rna-struct:MeshCacheModifier\",\"rna-struct:MeshSequenceCacheModifier\",\"rna-struct:MultiresModifier\",\"rna-struct:OceanModifier\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json" + ], + "coverageBindings": [ + "modifier-source:MOD_meshcache", + "modifier-source:MOD_meshsequencecache", + "modifier-source:MOD_multires", + "modifier-source:MOD_ocean", + "rna-struct:MeshCacheModifier", + "rna-struct:MeshSequenceCacheModifier", + "rna-struct:MultiresModifier", + "rna-struct:OceanModifier" + ] + } + }, + { + "id": "WBV2-P1151-000", + "phase": "1151", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1150-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1151", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1151-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1151-001", + "phase": "1151", + "title": "verify Grease Pencil modifier reader batch", + "kind": "module", + "owner": "DRAWING", + "dependsOn": [ + "WBV2-P1151-000" + ], + "parityId": "GREASE_PENCIL_MODIFIER_READER_BATCH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-grease_pencil_modifier_reader_batch", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1151-001.md", + "behavior": "Verify the GREASE_PENCIL_MODIFIER_READER_BATCH batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "GREASE_PENCIL_MODIFIER_READER_BATCH", + "sourceBacked": true, + "capabilities": [ + "CAP-GREASE_PENCIL_MODIFIER_READER_BATCH-READER", + "CAP-GREASE_PENCIL_MODIFIER_READER_BATCH-RECOVERY", + "CAP-GREASE_PENCIL_MODIFIER_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_armature.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_build.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_color.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_dash.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_envelope.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_hook.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_lattice.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_length.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_mirror.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_multiply.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_noise.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_offset.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_opacity.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_outline.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_shrinkwrap.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_simplify.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_smooth.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_subdiv.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_texture.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_thickness.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_time.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_tint.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_weight_angle.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_weight_proximity.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts", + "tests/files/web/modifier_grease_pencil_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "positive": [ + "MOD_grease_pencil_armature type is read from Blender Main", + "MOD_grease_pencil_array type is read from Blender Main", + "MOD_grease_pencil_build type is read from Blender Main", + "MOD_grease_pencil_color type is read from Blender Main", + "MOD_grease_pencil_dash type is read from Blender Main", + "MOD_grease_pencil_envelope type is read from Blender Main", + "MOD_grease_pencil_hook type is read from Blender Main", + "MOD_grease_pencil_lattice type is read from Blender Main", + "MOD_grease_pencil_length type is read from Blender Main", + "MOD_grease_pencil_mirror type is read from Blender Main", + "MOD_grease_pencil_multiply type is read from Blender Main", + "MOD_grease_pencil_noise type is read from Blender Main", + "MOD_grease_pencil_offset type is read from Blender Main", + "MOD_grease_pencil_opacity type is read from Blender Main", + "MOD_grease_pencil_outline type is read from Blender Main", + "MOD_grease_pencil_shrinkwrap type is read from Blender Main", + "MOD_grease_pencil_simplify type is read from Blender Main", + "MOD_grease_pencil_smooth type is read from Blender Main", + "MOD_grease_pencil_subdiv type is read from Blender Main", + "MOD_grease_pencil_texture type is read from Blender Main", + "MOD_grease_pencil_thickness type is read from Blender Main", + "MOD_grease_pencil_time type is read from Blender Main", + "MOD_grease_pencil_tint type is read from Blender Main", + "MOD_grease_pencil_weight_angle type is read from Blender Main", + "MOD_grease_pencil_weight_proximity type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1151-001 WBV2_BATCH_FIXTURE=tests/files/web/modifier_grease_pencil_scene.blend WBV2_BATCH_TYPES='[\"GREASE_PENCIL_ARMATURE\",\"GREASE_PENCIL_ARRAY\",\"GREASE_PENCIL_BUILD\",\"GREASE_PENCIL_COLOR\",\"GREASE_PENCIL_DASH\",\"GREASE_PENCIL_ENVELOPE\",\"GREASE_PENCIL_HOOK\",\"GREASE_PENCIL_LATTICE\",\"GREASE_PENCIL_LENGTH\",\"GREASE_PENCIL_MIRROR\",\"GREASE_PENCIL_MULTIPLY\",\"GREASE_PENCIL_NOISE\",\"GREASE_PENCIL_OFFSET\",\"GREASE_PENCIL_OPACITY\",\"GREASE_PENCIL_OUTLINE\",\"GREASE_PENCIL_SHRINKWRAP\",\"GREASE_PENCIL_SIMPLIFY\",\"GREASE_PENCIL_SMOOTH\",\"GREASE_PENCIL_SUBDIV\",\"GREASE_PENCIL_TEXTURE\",\"GREASE_PENCIL_THICKNESS\",\"GREASE_PENCIL_TIME\",\"GREASE_PENCIL_TINT\",\"GREASE_PENCIL_VERTEX_WEIGHT_ANGLE\",\"GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY\"]' WBV2_BATCH_UNITS='[\"modifier-source:MOD_grease_pencil_armature\",\"modifier-source:MOD_grease_pencil_array\",\"modifier-source:MOD_grease_pencil_build\",\"modifier-source:MOD_grease_pencil_color\",\"modifier-source:MOD_grease_pencil_dash\",\"modifier-source:MOD_grease_pencil_envelope\",\"modifier-source:MOD_grease_pencil_hook\",\"modifier-source:MOD_grease_pencil_lattice\",\"modifier-source:MOD_grease_pencil_length\",\"modifier-source:MOD_grease_pencil_mirror\",\"modifier-source:MOD_grease_pencil_multiply\",\"modifier-source:MOD_grease_pencil_noise\",\"modifier-source:MOD_grease_pencil_offset\",\"modifier-source:MOD_grease_pencil_opacity\",\"modifier-source:MOD_grease_pencil_outline\",\"modifier-source:MOD_grease_pencil_shrinkwrap\",\"modifier-source:MOD_grease_pencil_simplify\",\"modifier-source:MOD_grease_pencil_smooth\",\"modifier-source:MOD_grease_pencil_subdiv\",\"modifier-source:MOD_grease_pencil_texture\",\"modifier-source:MOD_grease_pencil_thickness\",\"modifier-source:MOD_grease_pencil_time\",\"modifier-source:MOD_grease_pencil_tint\",\"modifier-source:MOD_grease_pencil_weight_angle\",\"modifier-source:MOD_grease_pencil_weight_proximity\",\"rna-struct:GreasePencilArmatureModifier\",\"rna-struct:GreasePencilArrayModifier\",\"rna-struct:GreasePencilBuildModifier\",\"rna-struct:GreasePencilColorModifier\",\"rna-struct:GreasePencilEnvelopeModifier\",\"rna-struct:GreasePencilHookModifier\",\"rna-struct:GreasePencilLatticeModifier\",\"rna-struct:GreasePencilLengthModifier\",\"rna-struct:GreasePencilMirrorModifier\",\"rna-struct:GreasePencilMultiplyModifier\",\"rna-struct:GreasePencilNoiseModifier\",\"rna-struct:GreasePencilOffsetModifier\",\"rna-struct:GreasePencilOpacityModifier\",\"rna-struct:GreasePencilOutlineModifier\",\"rna-struct:GreasePencilShrinkwrapModifier\",\"rna-struct:GreasePencilSimplifyModifier\",\"rna-struct:GreasePencilSmoothModifier\",\"rna-struct:GreasePencilSubdivModifier\",\"rna-struct:GreasePencilTextureModifier\",\"rna-struct:GreasePencilTimeModifier\",\"rna-struct:GreasePencilTintModifier\",\"rna-struct:GreasePencilWeightAngleModifier\",\"rna-struct:GreasePencilWeightProximityModifier\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json" + ], + "coverageBindings": [ + "modifier-source:MOD_grease_pencil_armature", + "modifier-source:MOD_grease_pencil_array", + "modifier-source:MOD_grease_pencil_build", + "modifier-source:MOD_grease_pencil_color", + "modifier-source:MOD_grease_pencil_dash", + "modifier-source:MOD_grease_pencil_envelope", + "modifier-source:MOD_grease_pencil_hook", + "modifier-source:MOD_grease_pencil_lattice", + "modifier-source:MOD_grease_pencil_length", + "modifier-source:MOD_grease_pencil_mirror", + "modifier-source:MOD_grease_pencil_multiply", + "modifier-source:MOD_grease_pencil_noise", + "modifier-source:MOD_grease_pencil_offset", + "modifier-source:MOD_grease_pencil_opacity", + "modifier-source:MOD_grease_pencil_outline", + "modifier-source:MOD_grease_pencil_shrinkwrap", + "modifier-source:MOD_grease_pencil_simplify", + "modifier-source:MOD_grease_pencil_smooth", + "modifier-source:MOD_grease_pencil_subdiv", + "modifier-source:MOD_grease_pencil_texture", + "modifier-source:MOD_grease_pencil_thickness", + "modifier-source:MOD_grease_pencil_time", + "modifier-source:MOD_grease_pencil_tint", + "modifier-source:MOD_grease_pencil_weight_angle", + "modifier-source:MOD_grease_pencil_weight_proximity", + "rna-struct:GreasePencilArmatureModifier", + "rna-struct:GreasePencilArrayModifier", + "rna-struct:GreasePencilBuildModifier", + "rna-struct:GreasePencilColorModifier", + "rna-struct:GreasePencilEnvelopeModifier", + "rna-struct:GreasePencilHookModifier", + "rna-struct:GreasePencilLatticeModifier", + "rna-struct:GreasePencilLengthModifier", + "rna-struct:GreasePencilMirrorModifier", + "rna-struct:GreasePencilMultiplyModifier", + "rna-struct:GreasePencilNoiseModifier", + "rna-struct:GreasePencilOffsetModifier", + "rna-struct:GreasePencilOpacityModifier", + "rna-struct:GreasePencilOutlineModifier", + "rna-struct:GreasePencilShrinkwrapModifier", + "rna-struct:GreasePencilSimplifyModifier", + "rna-struct:GreasePencilSmoothModifier", + "rna-struct:GreasePencilSubdivModifier", + "rna-struct:GreasePencilTextureModifier", + "rna-struct:GreasePencilTimeModifier", + "rna-struct:GreasePencilTintModifier", + "rna-struct:GreasePencilWeightAngleModifier", + "rna-struct:GreasePencilWeightProximityModifier" + ] + } + }, + { + "id": "WBV2-P1152-000", + "phase": "1152", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1151-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1152", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1152-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1152-001", + "phase": "1152", + "title": "verify modifier reader batch six", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1152-000" + ], + "parityId": "MODIFIER_READER_BATCH_SIX", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_reader_batch_six", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1152-001.md", + "behavior": "Verify the MODIFIER_READER_BATCH_SIX batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_READER_BATCH_SIX", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_READER_BATCH_SIX-READER", + "CAP-MODIFIER_READER_BATCH_SIX-RECOVERY", + "CAP-MODIFIER_READER_BATCH_SIX-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_mesh_to_volume.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_particleinstance.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_surface.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgmix.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgproximity.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts", + "tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend", + "tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend", + "tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend", + "tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend", + "tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend", + "tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "positive": [ + "MOD_mesh_to_volume type is read from Blender Main", + "MOD_particleinstance type is read from Blender Main", + "MOD_surface type is read from Blender Main", + "MOD_weightvgedit type is read from Blender Main", + "MOD_weightvgmix type is read from Blender Main", + "MOD_weightvgproximity type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1152-001 WBV2_BATCH_FIXTURES='[\"tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend\",\"tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend\",\"tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend\",\"tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend\",\"tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend\",\"tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend\"]' WBV2_BATCH_TYPES='[\"MESH_TO_VOLUME\",\"PARTICLE_INSTANCE\",\"SURFACE\",\"VERTEX_WEIGHT_EDIT\",\"VERTEX_WEIGHT_MIX\",\"VERTEX_WEIGHT_PROXIMITY\"]' WBV2_BATCH_UNITS='[\"modifier-source:MOD_mesh_to_volume\",\"modifier-source:MOD_particleinstance\",\"modifier-source:MOD_surface\",\"modifier-source:MOD_weightvgedit\",\"modifier-source:MOD_weightvgmix\",\"modifier-source:MOD_weightvgproximity\",\"rna-struct:MeshToVolumeModifier\",\"rna-struct:ParticleInstanceModifier\",\"rna-struct:SurfaceModifier\",\"rna-struct:VertexWeightEditModifier\",\"rna-struct:VertexWeightMixModifier\",\"rna-struct:VertexWeightProximityModifier\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json" + ], + "coverageBindings": [ + "modifier-source:MOD_mesh_to_volume", + "modifier-source:MOD_particleinstance", + "modifier-source:MOD_surface", + "modifier-source:MOD_weightvgedit", + "modifier-source:MOD_weightvgmix", + "modifier-source:MOD_weightvgproximity", + "rna-struct:MeshToVolumeModifier", + "rna-struct:ParticleInstanceModifier", + "rna-struct:SurfaceModifier", + "rna-struct:VertexWeightEditModifier", + "rna-struct:VertexWeightMixModifier", + "rna-struct:VertexWeightProximityModifier" + ] + } + }, + { + "id": "WBV2-P1153-000", + "phase": "1153", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1152-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1153", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1153-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1153-001", + "phase": "1153", + "title": "reuse verified modifier receipts for shared source utilities", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1153-000" + ], + "parityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_source_dependency_reuse", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1153-001.md", + "behavior": "Verify the MODIFIER_SOURCE_DEPENDENCY_REUSE batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_SOURCE_DEPENDENCY_REUSE", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_SOURCE_DEPENDENCY_REUSE-READER", + "CAP-MODIFIER_SOURCE_DEPENDENCY_REUSE-RECOVERY", + "CAP-MODIFIER_SOURCE_DEPENDENCY_REUSE-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc", + "tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json", + "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json", + "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json", + "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json", + "tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json", + "tools/web/reuse-wbv2-source-dependencies.mjs" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1150-001/manifest.json", + "report": "tests/golden/WBV2-P1150-001/module-receipt.json" + }, + { + "manifest": "tests/golden/WBV2-P1151-001/manifest.json", + "report": "tests/golden/WBV2-P1151-001/module-receipt.json" + }, + { + "manifest": "tests/golden/WBV2-P1152-001/manifest.json", + "report": "tests/golden/WBV2-P1152-001/module-receipt.json" + } + ], + "dependencyReuse": [ + { + "unitId": "modifier-source:MOD_grease_pencil_util", + "representativeUnitId": "modifier-source:MOD_grease_pencil_array", + "proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc", + "marker": "MOD_grease_pencil_util.hh", + "productionEvidence": "tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json" + }, + { + "unitId": "modifier-source:MOD_meshcache_mdd", + "representativeUnitId": "modifier-source:MOD_meshcache", + "proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "marker": "MOD_meshcache_read_mdd_times", + "productionEvidence": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json" + }, + { + "unitId": "modifier-source:MOD_meshcache_pc2", + "representativeUnitId": "modifier-source:MOD_meshcache", + "proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "marker": "MOD_meshcache_read_pc2_times", + "productionEvidence": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json" + }, + { + "unitId": "modifier-source:MOD_meshcache_util", + "representativeUnitId": "modifier-source:MOD_meshcache", + "proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", + "marker": "MOD_meshcache_util.hh", + "productionEvidence": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json" + }, + { + "unitId": "modifier-source:MOD_weightvg_util", + "representativeUnitId": "modifier-source:MOD_weightvgedit", + "proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc", + "marker": "MOD_weightvg_util.hh", + "productionEvidence": "tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json" + } + ], + "positive": [ + "MOD_grease_pencil_util type is read from Blender Main", + "MOD_meshcache_mdd type is read from Blender Main", + "MOD_meshcache_pc2 type is read from Blender Main", + "MOD_meshcache_util type is read from Blender Main", + "MOD_weightvg_util type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "node tools/web/reuse-wbv2-source-dependencies.mjs --task WBV2-P1153-001 --write" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json" + ], + "coverageBindings": [ + "modifier-source:MOD_grease_pencil_util", + "modifier-source:MOD_meshcache_mdd", + "modifier-source:MOD_meshcache_pc2", + "modifier-source:MOD_meshcache_util", + "modifier-source:MOD_weightvg_util" + ] + } + }, + { + "id": "WBV2-P1154-000", + "phase": "1154", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1153-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1154", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1154-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1154-001", + "phase": "1154", + "title": "verify solidify split helper sources", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1154-000" + ], + "parityId": "MODIFIER_SOLIDIFY_HELPER_BATCH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_solidify_dependency_reuse", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1154-001.md", + "behavior": "Verify the MODIFIER_SOLIDIFY_HELPER_BATCH batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_SOLIDIFY_HELPER_BATCH", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_SOLIDIFY_HELPER_BATCH-READER", + "CAP-MODIFIER_SOLIDIFY_HELPER_BATCH-RECOVERY", + "CAP-MODIFIER_SOLIDIFY_HELPER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_solidify_extrude.cc", + "blender-5.2.0/source/blender/modifiers/intern/MOD_solidify_nonmanifold.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts", + "tests/files/web/modifier_generate_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/modifier-source-roundtrip-production.json" + } + ], + "positive": [ + "MOD_solidify_extrude type is read from Blender Main", + "MOD_solidify_nonmanifold type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1154-001 WBV2_BATCH_PRODUCTION=tests/golden/WBV2-P1154-001/modifier-reader-batch-production.json WBV2_BATCH_FIXTURE=tests/files/web/modifier_generate_scene.blend WBV2_BATCH_TYPES='[\"SOLIDIFY\"]' WBV2_BATCH_UNITS='[\"modifier-source:MOD_solidify_extrude\",\"modifier-source:MOD_solidify_nonmanifold\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1154-001/modifier-reader-batch-production.json" + ], + "coverageBindings": [ + "modifier-source:MOD_solidify_extrude", + "modifier-source:MOD_solidify_nonmanifold" + ] + } + }, + { + "id": "WBV2-P1155-000", + "phase": "1155", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1154-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1155", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1155-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1155-001", + "phase": "1155", + "title": "verify modifier RNA reader batch", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1155-000" + ], + "parityId": "MODIFIER_RNA_READER_BATCH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_rna_reader_batch", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1155-001.md", + "behavior": "Verify the MODIFIER_RNA_READER_BATCH batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_RNA_READER_BATCH", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_RNA_READER_BATCH-READER", + "CAP-MODIFIER_RNA_READER_BATCH-RECOVERY", + "CAP-MODIFIER_RNA_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts", + "tests/files/web/modifier_grease_pencil_scene.blend", + "tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend", + "tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "dependencyReuse": [], + "positive": [ + "MOD_lineart type is read from Blender Main", + "MOD_particlesystem type is read from Blender Main", + "MOD_decimate type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1155-001 WBV2_BATCH_PRODUCTION=tests/golden/WBV2-P1155-001/modifier-reader-batch-production.json WBV2_BATCH_FIXTURES='[\"tests/files/web/modifier_grease_pencil_scene.blend\",\"tests/files/web/generated/M16-GAP-00088-modifier-PARTICLE_SYSTEM.blend\",\"tests/files/web/generated/M16-GAP-00041-modifier-DECIMATE.blend\"]' WBV2_BATCH_TYPES='[\"LINEART\",\"PARTICLE_SYSTEM\",\"DECIMATE\"]' WBV2_BATCH_UNITS='[\"rna-struct:GreasePencilLineartModifier\",\"rna-struct:ParticleSystemModifier\",\"rna-struct:DecimateModifier\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1155-001/modifier-reader-batch-production.json" + ], + "coverageBindings": [ + "rna-struct:GreasePencilLineartModifier", + "rna-struct:ParticleSystemModifier", + "rna-struct:DecimateModifier" + ] + } + }, + { + "id": "WBV2-P1156-000", + "phase": "1156", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1155-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1156", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1156-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1156-001", + "phase": "1156", + "title": "verify volume displace modifier reader", + "kind": "module", + "owner": "MODIFIER", + "dependsOn": [ + "WBV2-P1156-000" + ], + "parityId": "MODIFIER_VOLUME_DISPLACE_BATCH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-modifier_volume_displace_batch", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1156-001.md", + "behavior": "Verify the MODIFIER_VOLUME_DISPLACE_BATCH batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "MODIFIER_VOLUME_DISPLACE_BATCH", + "sourceBacked": true, + "capabilities": [ + "CAP-MODIFIER_VOLUME_DISPLACE_BATCH-READER", + "CAP-MODIFIER_VOLUME_DISPLACE_BATCH-RECOVERY", + "CAP-MODIFIER_VOLUME_DISPLACE_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/modifiers/intern/MOD_volume_displace.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts", + "tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "dependencyReuse": [], + "positive": [ + "MOD_volume_displace type is read from Blender Main", + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1156-001 WBV2_BATCH_PRODUCTION=tests/golden/WBV2-P1156-001/modifier-reader-batch-production.json WBV2_BATCH_FIXTURE=tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend WBV2_BATCH_TYPES='[\"VOLUME_DISPLACE\"]' WBV2_BATCH_UNITS='[\"modifier-source:MOD_volume_displace\",\"rna-struct:VolumeDisplaceModifier\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-modifier-reader-multi-fixture-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1156-001/modifier-reader-batch-production.json" + ], + "coverageBindings": [ + "modifier-source:MOD_volume_displace", + "rna-struct:VolumeDisplaceModifier" + ] + } + }, + { + "id": "WBV2-P1157-000", + "phase": "1157", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1156-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1157", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1157-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1157-001", + "phase": "1157", + "title": "verify shape key point reader", + "kind": "module", + "owner": "ANIMATION", + "dependsOn": [ + "WBV2-P1157-000" + ], + "parityId": "SHAPE_KEY_POINT_READER_BATCH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-shape_key_point_reader_batch", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1157-001.md", + "behavior": "Verify the SHAPE_KEY_POINT_READER_BATCH batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "SHAPE_KEY_POINT_READER_BATCH", + "sourceBacked": true, + "capabilities": [ + "CAP-SHAPE_KEY_POINT_READER_BATCH-READER", + "CAP-SHAPE_KEY_POINT_READER_BATCH-RECOVERY", + "CAP-SHAPE_KEY_POINT_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_key.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-shape-key-reader-production.spec.ts", + "tests/files/web/rigged_shape_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "dependencyReuse": [], + "positive": [ + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1157-001 WBV2_BATCH_PRODUCTION=tests/golden/WBV2-P1157-001/shape-key-reader-production.json WBV2_BATCH_FIXTURE=tests/files/web/rigged_shape_scene.blend WBV2_BATCH_TYPES='[]' WBV2_BATCH_UNITS='[\"rna-struct:ShapeKeyPoint\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-shape-key-reader-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1157-001/shape-key-reader-production.json" + ], + "coverageBindings": [ + "rna-struct:ShapeKeyPoint" + ] + } + }, + { + "id": "WBV2-P1158-000", + "phase": "1158", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1157-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1158", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1158-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1158-001", + "phase": "1158", + "title": "verify line style reader batch", + "kind": "module", + "owner": "DRAWING", + "dependsOn": [ + "WBV2-P1158-000" + ], + "parityId": "LINE_STYLE_READER_BATCH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-line_style_reader_batch", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1158-001.md", + "behavior": "Verify the LINE_STYLE_READER_BATCH batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "LINE_STYLE_READER_BATCH", + "sourceBacked": true, + "capabilities": [ + "CAP-LINE_STYLE_READER_BATCH-READER", + "CAP-LINE_STYLE_READER_BATCH-RECOVERY", + "CAP-LINE_STYLE_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-line-style-reader-production.spec.ts", + "tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "dependencyReuse": [], + "positive": [ + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1158-001 WBV2_BATCH_PRODUCTION=tests/golden/WBV2-P1158-001/line-style-reader-production.json WBV2_BATCH_FIXTURE=tests/files/web/generated/M16-GAP-00008-datablock-FreestyleLineStyle.blend WBV2_BATCH_TYPES='[]' WBV2_BATCH_UNITS='[\"rna-struct:FreestyleLineStyle\",\"rna-struct:LineStyleModifier\",\"rna-struct:LineStyleAlphaModifier\",\"rna-struct:LineStyleColorModifier\",\"rna-struct:LineStyleGeometryModifier\",\"rna-struct:LineStyleThicknessModifier\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-line-style-reader-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1158-001/line-style-reader-production.json" + ], + "coverageBindings": [ + "rna-struct:FreestyleLineStyle", + "rna-struct:LineStyleModifier", + "rna-struct:LineStyleAlphaModifier", + "rna-struct:LineStyleColorModifier", + "rna-struct:LineStyleGeometryModifier", + "rna-struct:LineStyleThicknessModifier" + ] + } + }, + { + "id": "WBV2-P1159-000", + "phase": "1159", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1158-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1159", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1159-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1159-001", + "phase": "1159", + "title": "verify line style collection reader batch", + "kind": "module", + "owner": "DRAWING", + "dependsOn": [ + "WBV2-P1159-000" + ], + "parityId": "LINE_STYLE_COLLECTION_READER_BATCH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-line_style_collection_reader_batch", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1159-001.md", + "behavior": "Verify the LINE_STYLE_COLLECTION_READER_BATCH batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "LINE_STYLE_COLLECTION_READER_BATCH", + "sourceBacked": true, + "capabilities": [ + "CAP-LINE_STYLE_COLLECTION_READER_BATCH-READER", + "CAP-LINE_STYLE_COLLECTION_READER_BATCH-RECOVERY", + "CAP-LINE_STYLE_COLLECTION_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_main_api.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-line-style-reader-production.spec.ts", + "tests/files/web/line_style_modifier_batch_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "dependencyReuse": [], + "positive": [ + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1159-001 WBV2_BATCH_PRODUCTION=tests/golden/WBV2-P1159-001/line-style-reader-production.json WBV2_BATCH_FIXTURE=tests/files/web/line_style_modifier_batch_scene.blend WBV2_BATCH_TYPES='[]' WBV2_BATCH_UNITS='[\"rna-struct:BlendDataLineStyles\",\"rna-struct:LineStyleColorModifiers\",\"rna-struct:LineStyleAlphaModifiers\",\"rna-struct:LineStyleThicknessModifiers\",\"rna-struct:LineStyleGeometryModifiers\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-line-style-reader-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1159-001/line-style-reader-production.json" + ], + "coverageBindings": [ + "rna-struct:BlendDataLineStyles", + "rna-struct:LineStyleColorModifiers", + "rna-struct:LineStyleAlphaModifiers", + "rna-struct:LineStyleThicknessModifiers", + "rna-struct:LineStyleGeometryModifiers" + ] + } + }, + { + "id": "WBV2-P1160-000", + "phase": "1160", + "title": "authorize_modifier_reader_batch", + "kind": "enabling", + "owner": "PROGRAM", + "dependsOn": [ + "WBV2-P1159-001" + ], + "parityId": null, + "implementationClass": "QUEUE_ONLY", + "parallelGroup": "module-root-1160", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1160-000.md", + "behavior": "Authorize one shared source-backed modifier reader batch.", + "outputs": [ + "successor authorization", + "module plan", + "manifest", + "status" + ], + "acceptance": [ + "prior evidence remains hash-bound", + "batch source mapping is explicit", + "inventory remains source-derived" + ], + "commands": [ + "node tools/web/check-execution-control-plane.mjs" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true + }, + { + "id": "WBV2-P1160-001", + "phase": "1160", + "title": "verify line style modifier subtype reader batch", + "kind": "module", + "owner": "DRAWING", + "dependsOn": [ + "WBV2-P1160-000" + ], + "parityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "implementationClass": "LOCAL_EXACT", + "parallelGroup": "module-line_style_subtype_reader_batch", + "gate": "MODULE", + "card": "docs/tasks/WBV2-P1160-001.md", + "behavior": "Verify the LINE_STYLE_SUBTYPE_READER_BATCH batch through Blender Main, WASM and Chromium recovery.", + "outputs": [ + "aggregate module receipt", + "coverage bindings", + "manifest", + "status" + ], + "acceptance": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "status": "done", + "ready": false, + "queueMutationAllowed": true, + "module": { + "moduleId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceBacked": true, + "capabilities": [ + "CAP-LINE_STYLE_SUBTYPE_READER_BATCH-READER", + "CAP-LINE_STYLE_SUBTYPE_READER_BATCH-RECOVERY", + "CAP-LINE_STYLE_SUBTYPE_READER_BATCH-FAIL-CLOSED" + ], + "sourcePaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-line-style-reader-production.spec.ts", + "tests/files/web/line_style_subtype_batch_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "reuseReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json" + } + ], + "dependencyReuse": [], + "positive": [ + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ], + "commands": [ + "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "npm --prefix web run typecheck", + "npm --prefix web run build", + "WBV2_BATCH_TASK=WBV2-P1160-001 WBV2_BATCH_PRODUCTION=tests/golden/WBV2-P1160-001/line-style-reader-production.json WBV2_BATCH_FIXTURE=tests/files/web/line_style_subtype_batch_scene.blend WBV2_BATCH_TYPES='[]' WBV2_BATCH_UNITS='[\"rna-struct:LineStyleAlphaModifier_AlongStroke\",\"rna-struct:LineStyleAlphaModifier_CreaseAngle\",\"rna-struct:LineStyleAlphaModifier_Curvature_3D\",\"rna-struct:LineStyleAlphaModifier_DistanceFromCamera\",\"rna-struct:LineStyleAlphaModifier_DistanceFromObject\",\"rna-struct:LineStyleAlphaModifier_Material\",\"rna-struct:LineStyleAlphaModifier_Noise\",\"rna-struct:LineStyleAlphaModifier_Tangent\",\"rna-struct:LineStyleColorModifier_AlongStroke\",\"rna-struct:LineStyleColorModifier_CreaseAngle\",\"rna-struct:LineStyleColorModifier_Curvature_3D\",\"rna-struct:LineStyleColorModifier_DistanceFromCamera\",\"rna-struct:LineStyleColorModifier_DistanceFromObject\",\"rna-struct:LineStyleColorModifier_Material\",\"rna-struct:LineStyleColorModifier_Noise\",\"rna-struct:LineStyleColorModifier_Tangent\",\"rna-struct:LineStyleGeometryModifier_2DOffset\",\"rna-struct:LineStyleGeometryModifier_2DTransform\",\"rna-struct:LineStyleGeometryModifier_BackboneStretcher\",\"rna-struct:LineStyleGeometryModifier_BezierCurve\",\"rna-struct:LineStyleGeometryModifier_Blueprint\",\"rna-struct:LineStyleGeometryModifier_GuidingLines\",\"rna-struct:LineStyleGeometryModifier_PerlinNoise1D\",\"rna-struct:LineStyleGeometryModifier_PerlinNoise2D\",\"rna-struct:LineStyleGeometryModifier_Polygonalization\",\"rna-struct:LineStyleGeometryModifier_Sampling\",\"rna-struct:LineStyleGeometryModifier_Simplification\",\"rna-struct:LineStyleGeometryModifier_SinusDisplacement\",\"rna-struct:LineStyleGeometryModifier_SpatialNoise\",\"rna-struct:LineStyleGeometryModifier_TipRemover\",\"rna-struct:LineStyleThicknessModifier_AlongStroke\",\"rna-struct:LineStyleThicknessModifier_Calligraphy\",\"rna-struct:LineStyleThicknessModifier_CreaseAngle\",\"rna-struct:LineStyleThicknessModifier_Curvature_3D\",\"rna-struct:LineStyleThicknessModifier_DistanceFromCamera\",\"rna-struct:LineStyleThicknessModifier_DistanceFromObject\",\"rna-struct:LineStyleThicknessModifier_Material\",\"rna-struct:LineStyleThicknessModifier_Noise\",\"rna-struct:LineStyleThicknessModifier_Tangent\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-line-style-reader-production.spec.ts" + ], + "fullFamilyParity": false, + "evidencePaths": [ + "tests/golden/WBV2-P1160-001/line-style-reader-production.json" + ], + "coverageBindings": [ + "rna-struct:LineStyleAlphaModifier_AlongStroke", + "rna-struct:LineStyleAlphaModifier_CreaseAngle", + "rna-struct:LineStyleAlphaModifier_Curvature_3D", + "rna-struct:LineStyleAlphaModifier_DistanceFromCamera", + "rna-struct:LineStyleAlphaModifier_DistanceFromObject", + "rna-struct:LineStyleAlphaModifier_Material", + "rna-struct:LineStyleAlphaModifier_Noise", + "rna-struct:LineStyleAlphaModifier_Tangent", + "rna-struct:LineStyleColorModifier_AlongStroke", + "rna-struct:LineStyleColorModifier_CreaseAngle", + "rna-struct:LineStyleColorModifier_Curvature_3D", + "rna-struct:LineStyleColorModifier_DistanceFromCamera", + "rna-struct:LineStyleColorModifier_DistanceFromObject", + "rna-struct:LineStyleColorModifier_Material", + "rna-struct:LineStyleColorModifier_Noise", + "rna-struct:LineStyleColorModifier_Tangent", + "rna-struct:LineStyleGeometryModifier_2DOffset", + "rna-struct:LineStyleGeometryModifier_2DTransform", + "rna-struct:LineStyleGeometryModifier_BackboneStretcher", + "rna-struct:LineStyleGeometryModifier_BezierCurve", + "rna-struct:LineStyleGeometryModifier_Blueprint", + "rna-struct:LineStyleGeometryModifier_GuidingLines", + "rna-struct:LineStyleGeometryModifier_PerlinNoise1D", + "rna-struct:LineStyleGeometryModifier_PerlinNoise2D", + "rna-struct:LineStyleGeometryModifier_Polygonalization", + "rna-struct:LineStyleGeometryModifier_Sampling", + "rna-struct:LineStyleGeometryModifier_Simplification", + "rna-struct:LineStyleGeometryModifier_SinusDisplacement", + "rna-struct:LineStyleGeometryModifier_SpatialNoise", + "rna-struct:LineStyleGeometryModifier_TipRemover", + "rna-struct:LineStyleThicknessModifier_AlongStroke", + "rna-struct:LineStyleThicknessModifier_Calligraphy", + "rna-struct:LineStyleThicknessModifier_CreaseAngle", + "rna-struct:LineStyleThicknessModifier_Curvature_3D", + "rna-struct:LineStyleThicknessModifier_DistanceFromCamera", + "rna-struct:LineStyleThicknessModifier_DistanceFromObject", + "rna-struct:LineStyleThicknessModifier_Material", + "rna-struct:LineStyleThicknessModifier_Noise", + "rna-struct:LineStyleThicknessModifier_Tangent" + ] + } + } + ] +} diff --git a/tests/golden/WBV2-P1160-000/successor-authorization-report.json b/tests/golden/WBV2-P1160-000/successor-authorization-report.json new file mode 100644 index 000000000..2b2393980 --- /dev/null +++ b/tests/golden/WBV2-P1160-000/successor-authorization-report.json @@ -0,0 +1,72 @@ +{ + "schemaVersion": 1, + "task": "WBV2-P1160-000", + "operation": "AUTHORIZE_SOURCE_BACKED_MODULE_BATCH", + "taskClass": "QUEUE_ENABLEMENT", + "status": "PASS", + "parent": { + "task": "WBV2-P1159-001", + "manifest": "tests/golden/WBV2-P1159-001/manifest.json", + "manifestSha256": "7805c6aebb18f4766a0e176762385e592698ff39847a344e1c9f463db0f50c83" + }, + "module": { + "moduleId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "task": "WBV2-P1160-001", + "batchSize": 39, + "candidateBatchSize": 39, + "sourceUnits": [ + "rna-struct:LineStyleAlphaModifier_AlongStroke", + "rna-struct:LineStyleAlphaModifier_CreaseAngle", + "rna-struct:LineStyleAlphaModifier_Curvature_3D", + "rna-struct:LineStyleAlphaModifier_DistanceFromCamera", + "rna-struct:LineStyleAlphaModifier_DistanceFromObject", + "rna-struct:LineStyleAlphaModifier_Material", + "rna-struct:LineStyleAlphaModifier_Noise", + "rna-struct:LineStyleAlphaModifier_Tangent", + "rna-struct:LineStyleColorModifier_AlongStroke", + "rna-struct:LineStyleColorModifier_CreaseAngle", + "rna-struct:LineStyleColorModifier_Curvature_3D", + "rna-struct:LineStyleColorModifier_DistanceFromCamera", + "rna-struct:LineStyleColorModifier_DistanceFromObject", + "rna-struct:LineStyleColorModifier_Material", + "rna-struct:LineStyleColorModifier_Noise", + "rna-struct:LineStyleColorModifier_Tangent", + "rna-struct:LineStyleGeometryModifier_2DOffset", + "rna-struct:LineStyleGeometryModifier_2DTransform", + "rna-struct:LineStyleGeometryModifier_BackboneStretcher", + "rna-struct:LineStyleGeometryModifier_BezierCurve", + "rna-struct:LineStyleGeometryModifier_Blueprint", + "rna-struct:LineStyleGeometryModifier_GuidingLines", + "rna-struct:LineStyleGeometryModifier_PerlinNoise1D", + "rna-struct:LineStyleGeometryModifier_PerlinNoise2D", + "rna-struct:LineStyleGeometryModifier_Polygonalization", + "rna-struct:LineStyleGeometryModifier_Sampling", + "rna-struct:LineStyleGeometryModifier_Simplification", + "rna-struct:LineStyleGeometryModifier_SinusDisplacement", + "rna-struct:LineStyleGeometryModifier_SpatialNoise", + "rna-struct:LineStyleGeometryModifier_TipRemover", + "rna-struct:LineStyleThicknessModifier_AlongStroke", + "rna-struct:LineStyleThicknessModifier_Calligraphy", + "rna-struct:LineStyleThicknessModifier_CreaseAngle", + "rna-struct:LineStyleThicknessModifier_Curvature_3D", + "rna-struct:LineStyleThicknessModifier_DistanceFromCamera", + "rna-struct:LineStyleThicknessModifier_DistanceFromObject", + "rna-struct:LineStyleThicknessModifier_Material", + "rna-struct:LineStyleThicknessModifier_Noise", + "rna-struct:LineStyleThicknessModifier_Tangent" + ], + "sourceBacked": true + }, + "inventory": { + "unitCount": 3745, + "verifiedUnits": 478, + "unverifiedUnits": 3267, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "boundUnitDelta": 0 + }, + "efficiency": { + "existingBindingsReused": 0, + "selectionPolicy": "all-candidate-units-then-unresolved-only" + }, + "nextTask": "WBV2-P1160-001" +} diff --git a/tests/golden/WBV2-P1160-001/line-style-reader-production.json b/tests/golden/WBV2-P1160-001/line-style-reader-production.json new file mode 100644 index 000000000..618026f2e --- /dev/null +++ b/tests/golden/WBV2-P1160-001/line-style-reader-production.json @@ -0,0 +1,265 @@ +{ + "schemaVersion": 1, + "task": "WBV2-P1160-001", + "operation": "LINE_STYLE_READER_CHROMIUM_SAVE_REOPEN", + "browser": "chromium", + "queueMutation": false, + "fixture": "tests/files/web/line_style_subtype_batch_scene.blend", + "fixtureSha256": "c4fddc058b4695bdade37ab2fa4adfd55d0044989d1127d8130512346a121a85", + "sourceUnits": [ + "rna-struct:LineStyleAlphaModifier_AlongStroke", + "rna-struct:LineStyleAlphaModifier_CreaseAngle", + "rna-struct:LineStyleAlphaModifier_Curvature_3D", + "rna-struct:LineStyleAlphaModifier_DistanceFromCamera", + "rna-struct:LineStyleAlphaModifier_DistanceFromObject", + "rna-struct:LineStyleAlphaModifier_Material", + "rna-struct:LineStyleAlphaModifier_Noise", + "rna-struct:LineStyleAlphaModifier_Tangent", + "rna-struct:LineStyleColorModifier_AlongStroke", + "rna-struct:LineStyleColorModifier_CreaseAngle", + "rna-struct:LineStyleColorModifier_Curvature_3D", + "rna-struct:LineStyleColorModifier_DistanceFromCamera", + "rna-struct:LineStyleColorModifier_DistanceFromObject", + "rna-struct:LineStyleColorModifier_Material", + "rna-struct:LineStyleColorModifier_Noise", + "rna-struct:LineStyleColorModifier_Tangent", + "rna-struct:LineStyleGeometryModifier_2DOffset", + "rna-struct:LineStyleGeometryModifier_2DTransform", + "rna-struct:LineStyleGeometryModifier_BackboneStretcher", + "rna-struct:LineStyleGeometryModifier_BezierCurve", + "rna-struct:LineStyleGeometryModifier_Blueprint", + "rna-struct:LineStyleGeometryModifier_GuidingLines", + "rna-struct:LineStyleGeometryModifier_PerlinNoise1D", + "rna-struct:LineStyleGeometryModifier_PerlinNoise2D", + "rna-struct:LineStyleGeometryModifier_Polygonalization", + "rna-struct:LineStyleGeometryModifier_Sampling", + "rna-struct:LineStyleGeometryModifier_Simplification", + "rna-struct:LineStyleGeometryModifier_SinusDisplacement", + "rna-struct:LineStyleGeometryModifier_SpatialNoise", + "rna-struct:LineStyleGeometryModifier_TipRemover", + "rna-struct:LineStyleThicknessModifier_AlongStroke", + "rna-struct:LineStyleThicknessModifier_Calligraphy", + "rna-struct:LineStyleThicknessModifier_CreaseAngle", + "rna-struct:LineStyleThicknessModifier_Curvature_3D", + "rna-struct:LineStyleThicknessModifier_DistanceFromCamera", + "rna-struct:LineStyleThicknessModifier_DistanceFromObject", + "rna-struct:LineStyleThicknessModifier_Material", + "rna-struct:LineStyleThicknessModifier_Noise", + "rna-struct:LineStyleThicknessModifier_Tangent" + ], + "before": [ + { + "id": "line-style:WebGapLineStyle", + "name": "WebGapLineStyle", + "color": [ + 0.20000000298023224, + 0.4000000059604645, + 0.800000011920929 + ], + "alpha": 0.75, + "thickness": 2.5, + "modifierCounts": { + "alpha": 8, + "color": 8, + "geometry": 15, + "thickness": 9 + }, + "modifierTypeCodes": { + "alpha": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "color": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "geometry": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "thickness": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + } + ], + "styleCount": 1, + "after": [ + { + "id": "line-style:WebGapLineStyle", + "name": "WebGapLineStyle", + "color": [ + 0.20000000298023224, + 0.4000000059604645, + 0.800000011920929 + ], + "alpha": 0.75, + "thickness": 2.5, + "modifierCounts": { + "alpha": 8, + "color": 8, + "geometry": 15, + "thickness": 9 + }, + "modifierTypeCodes": { + "alpha": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "color": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "geometry": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "thickness": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + } + ], + "second": [ + { + "id": "line-style:WebGapLineStyle", + "name": "WebGapLineStyle", + "color": [ + 0.20000000298023224, + 0.4000000059604645, + 0.800000011920929 + ], + "alpha": 0.75, + "thickness": 2.5, + "modifierCounts": { + "alpha": 8, + "color": 8, + "geometry": 15, + "thickness": 9 + }, + "modifierTypeCodes": { + "alpha": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "color": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "geometry": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ], + "thickness": [ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + ] + } + } + ], + "saveReopenExact": true, + "deterministicExact": true, + "savedSha256": "c4fddc058b4695bdade37ab2fa4adfd55d0044989d1127d8130512346a121a85", + "malformed": { + "code": "BLEND_READ_FAILED", + "message": "Input is not an uncompressed, gzip, or zstd Blender file" + } +} diff --git a/tests/golden/WBV2-P1160-001/manifest.json b/tests/golden/WBV2-P1160-001/manifest.json new file mode 100644 index 000000000..23c7bf417 --- /dev/null +++ b/tests/golden/WBV2-P1160-001/manifest.json @@ -0,0 +1,235 @@ +{ + "schemaVersion": 1, + "task": "WBV2-P1160-001", + "parentTask": "WBV2-P1160-000", + "operation": "MODULE_FUNCTION_EXECUTION", + "taskClass": "MODULE", + "status": "done", + "enablingTask": true, + "parityStateChange": false, + "runtime": "BLENDER_WEB_FUNCTION_MODULE", + "artifacts": { + "parentManifest": { + "path": "tests/golden/WBV2-P1160-000/manifest.json", + "sha256": "4222bd6c7d6d4441a1559e9bbf50f88365089a60a1e6d43914625870a82745df" + }, + "source1": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source2": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source3": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source4": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source5": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source6": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source7": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source8": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source9": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source10": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source11": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source12": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source13": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source14": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source15": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source16": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source17": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source18": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source19": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source20": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source21": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source22": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source23": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source24": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source25": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source26": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source27": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source28": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source29": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source30": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source31": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source32": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source33": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source34": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source35": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source36": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source37": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source38": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source39": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "sha256": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28" + }, + "source40": { + "path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "sha256": "8a9b46e8f5f9c4b30ad7818fac6fbd64b20dc2d0a962630f50c8f352bdf230d3" + }, + "source41": { + "path": "web/tests/e2e/wbv2-line-style-reader-production.spec.ts", + "sha256": "aa01e2395884cedce978744fe8f69c701acfa00bae8826428c8aeccbe0b9e014" + }, + "source42": { + "path": "tests/files/web/line_style_subtype_batch_scene.blend", + "sha256": "c4fddc058b4695bdade37ab2fa4adfd55d0044989d1127d8130512346a121a85" + }, + "source43": { + "path": "web/app/src/vendor/blender/web_engine.wasm", + "sha256": "66fc59cba55a8c17d398b74d12ea4a9f09746c0f30c40f579c44aa34956e3072" + }, + "evidence1": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "moduleReceipt": { + "path": "tests/golden/WBV2-P1160-001/module-receipt.json", + "sha256": "3e19a984f3a13f18654b58c7b497787ec6e5cc4b36befc003877f1e00d624e33" + }, + "status": { + "path": "docs/status/WBV2-P1160-001.md", + "sha256": "b5187b6e85888aa88d7bf66906a500a7a63379989708c7a426c51e2ae5f5d3d2" + }, + "log": { + "path": "tests/golden/WBV2-P1160-001/module-run.log", + "sha256": "367d3eb2c95e028501c7ea37008c8b34312fc45f8a211f746166d0eda2887740" + }, + "plan": { + "path": "tests/golden/WBV2-P1160-000/module-execution-plan.json", + "sha256": "a856be69ef50c2c38d6921ce236fedf158b027deec904d8d4bba03a469131831" + }, + "taskContext": { + "path": "tests/golden/WBV2-P1160-001/task-context.json", + "sha256": "3ff9bd4128639818623eadc33f6a558f037754be3b04293ca3d7d26e0ae7a0d0" + } + }, + "assertions": { + "moduleId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceBacked": true, + "positiveCases": 2, + "negativeCases": 3, + "recoveryCases": 3, + "commandCount": 4, + "reusedReceiptCount": 1, + "sourceUnchanged": true, + "fullFamilyParity": false, + "dynamicInventoryPath": "tests/golden/WBV2/dynamic-inventory.json", + "dynamicSourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "dynamicUnitCount": 3745, + "dynamicVerifiedUnits": 517, + "dynamicUnverifiedUnits": 3228, + "planningEstimate": 5200, + "historicalInventoryTotal": 6900, + "historicalEffectiveCompleted": 290, + "historicalEffectivePending": 6609, + "historicalReproduction": false + }, + "nextTask": null +} diff --git a/tests/golden/WBV2-P1160-001/module-receipt.json b/tests/golden/WBV2-P1160-001/module-receipt.json new file mode 100644 index 000000000..546d1bb67 --- /dev/null +++ b/tests/golden/WBV2-P1160-001/module-receipt.json @@ -0,0 +1,197 @@ +{ + "schemaVersion": 1, + "task": "WBV2-P1160-001", + "operation": "MODULE_FUNCTION_EXECUTION", + "moduleId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "status": "PASS", + "source": { + "paths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", + "web/tests/e2e/wbv2-line-style-reader-production.spec.ts", + "tests/files/web/line_style_subtype_batch_scene.blend", + "web/app/src/vendor/blender/web_engine.wasm" + ], + "auditedPaths": [ + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp" + ], + "before": { + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "8a9b46e8f5f9c4b30ad7818fac6fbd64b20dc2d0a962630f50c8f352bdf230d3" + }, + "after": { + "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc": "80d9fa286b7952ddecb39137a033cd1320f6747086dbeb41fe009ad7b0186f28", + "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp": "8a9b46e8f5f9c4b30ad7818fac6fbd64b20dc2d0a962630f50c8f352bdf230d3" + }, + "unchanged": true + }, + "reusedReceipts": [ + { + "manifest": "tests/golden/WBV2-P1107-000/manifest.json", + "report": "tests/golden/WBV2-P1107-000/module-receipt.json", + "manifestSha256": "a53ebdc52db5dcf27d44e938e5551f1ee2adae8e46c3fe8661604ee6b1000f8c", + "reportSha256": "6dd419799e1a4b9251328d9496f2459d148cd89118740a06b0ee6ffb78e0b1d2" + } + ], + "cases": { + "positive": [ + "shared RNA metadata is preserved", + "save/reopen preserves the batch metadata" + ], + "negative": [ + "malformed blend is rejected without Main mutation", + "unsupported batch data fails closed", + "non-finite metadata is not synthesized" + ], + "recovery": [ + "save/reopen", + "worker termination", + "deterministic second read" + ] + }, + "commands": [ + { + "command": "source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm", + "exitCode": 0, + "durationMs": 0, + "reused": true + }, + { + "command": "npm --prefix web run typecheck", + "exitCode": 0, + "durationMs": 0, + "reused": true + }, + { + "command": "npm --prefix web run build", + "exitCode": 0, + "durationMs": 0, + "reused": true + }, + { + "command": "WBV2_BATCH_TASK=WBV2-P1160-001 WBV2_BATCH_PRODUCTION=tests/golden/WBV2-P1160-001/line-style-reader-production.json WBV2_BATCH_FIXTURE=tests/files/web/line_style_subtype_batch_scene.blend WBV2_BATCH_TYPES='[]' WBV2_BATCH_UNITS='[\"rna-struct:LineStyleAlphaModifier_AlongStroke\",\"rna-struct:LineStyleAlphaModifier_CreaseAngle\",\"rna-struct:LineStyleAlphaModifier_Curvature_3D\",\"rna-struct:LineStyleAlphaModifier_DistanceFromCamera\",\"rna-struct:LineStyleAlphaModifier_DistanceFromObject\",\"rna-struct:LineStyleAlphaModifier_Material\",\"rna-struct:LineStyleAlphaModifier_Noise\",\"rna-struct:LineStyleAlphaModifier_Tangent\",\"rna-struct:LineStyleColorModifier_AlongStroke\",\"rna-struct:LineStyleColorModifier_CreaseAngle\",\"rna-struct:LineStyleColorModifier_Curvature_3D\",\"rna-struct:LineStyleColorModifier_DistanceFromCamera\",\"rna-struct:LineStyleColorModifier_DistanceFromObject\",\"rna-struct:LineStyleColorModifier_Material\",\"rna-struct:LineStyleColorModifier_Noise\",\"rna-struct:LineStyleColorModifier_Tangent\",\"rna-struct:LineStyleGeometryModifier_2DOffset\",\"rna-struct:LineStyleGeometryModifier_2DTransform\",\"rna-struct:LineStyleGeometryModifier_BackboneStretcher\",\"rna-struct:LineStyleGeometryModifier_BezierCurve\",\"rna-struct:LineStyleGeometryModifier_Blueprint\",\"rna-struct:LineStyleGeometryModifier_GuidingLines\",\"rna-struct:LineStyleGeometryModifier_PerlinNoise1D\",\"rna-struct:LineStyleGeometryModifier_PerlinNoise2D\",\"rna-struct:LineStyleGeometryModifier_Polygonalization\",\"rna-struct:LineStyleGeometryModifier_Sampling\",\"rna-struct:LineStyleGeometryModifier_Simplification\",\"rna-struct:LineStyleGeometryModifier_SinusDisplacement\",\"rna-struct:LineStyleGeometryModifier_SpatialNoise\",\"rna-struct:LineStyleGeometryModifier_TipRemover\",\"rna-struct:LineStyleThicknessModifier_AlongStroke\",\"rna-struct:LineStyleThicknessModifier_Calligraphy\",\"rna-struct:LineStyleThicknessModifier_CreaseAngle\",\"rna-struct:LineStyleThicknessModifier_Curvature_3D\",\"rna-struct:LineStyleThicknessModifier_DistanceFromCamera\",\"rna-struct:LineStyleThicknessModifier_DistanceFromObject\",\"rna-struct:LineStyleThicknessModifier_Material\",\"rna-struct:LineStyleThicknessModifier_Noise\",\"rna-struct:LineStyleThicknessModifier_Tangent\"]' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-line-style-reader-production.spec.ts", + "exitCode": 0, + "durationMs": 0, + "reused": true + } + ], + "verification": { + "required": [ + "sourceHash", + "wasmBuild", + "positiveMainMutation", + "negativeNoMutation", + "undoRedo", + "saveReopen", + "aggregateManifest" + ], + "chromiumOnly": true, + "fullFamilyParity": false + }, + "efficiency": { + "existingEvidenceReused": true, + "skippedCommands": 4, + "totalDurationMs": 0, + "reusePolicy": "hash_bound_receipt" + }, + "inventory": { + "historical": { + "path": "tests/golden/WBV2-P0-002/parity-map.json", + "sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8", + "total": 6900, + "legacyCompleted": 281, + "legacyPending": 6618, + "effectiveCompleted": 290, + "effectivePending": 6609, + "mutation": "forbidden_by_module_execution" + }, + "dynamic": { + "path": "tests/golden/WBV2/dynamic-inventory.json", + "sha256": "b09c5937736e043ca779d47bbbfec03cf3a3efe404507785f7495f740c51d058", + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "unitCount": 3745, + "planningEstimate": 5200, + "hardTarget": false, + "verifiedUnits": 517, + "unverifiedUnits": 3228 + } + }, + "nextTask": null +} diff --git a/tests/golden/WBV2-P1160-001/task-context.json b/tests/golden/WBV2-P1160-001/task-context.json new file mode 100644 index 000000000..048ed0ff1 --- /dev/null +++ b/tests/golden/WBV2-P1160-001/task-context.json @@ -0,0 +1,172 @@ +{ + "schemaVersion": 1, + "task": "WBV2-P1160-001", + "parentTask": "WBV2-P1160-000", + "status": "done", + "goal": "使用一个共享 Blender Main/WASM/Worker/Chromium 链验证 0 个 modifier source 与 39 个 RNA unit,形成一个聚合 receipt。", + "scope": { + "gap": "capability:LINE_STYLE_SUBTYPE_READER_BATCH", + "ownerFamily": "DRAWING", + "implementationClass": "LOCAL_EXACT" + }, + "commands": [ + "node tools/web/check-task-context.mjs --task WBV2-P1160-001 --write" + ], + "inputPaths": [], + "inputSelection": { + "schemaVersion": 1, + "limits": { + "maxFiles": 12, + "evidenceBytes": 8192, + "contextRemainingBytes": 2570, + "contextRemainingTokens": 641 + }, + "source": { + "bytes": 7334, + "tokens": 1835 + }, + "selected": [], + "excluded": [ + { + "path": "blender-5.2.0/source/blender", + "bytes": 12546, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/files/web/line_style_subtype_batch_scene.blend", + "bytes": 87057, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "web/tests/e2e/wbv2-line-style-reader-production.spec.ts", + "bytes": 4405, + "reason": "CONTEXT_REMAINING_SPACE" + }, + { + "path": "tests/golden/WBV2-P1160-001/module-receipt.json", + "bytes": 11874, + "reason": "EVIDENCE_BYTE_BUDGET" + }, + { + "path": "tests/golden/WBV2-P1160-001/modifier-reader-batch-production.json", + "bytes": null, + "reason": "MISSING_PATH" + }, + { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "bytes": null, + "reason": "GENERATED_EVIDENCE_OUTPUT" + } + ], + "totals": { + "files": 0, + "bytes": 0, + "tokens": 0 + } + }, + "exitCriteria": [ + "source and protocol hashes are bound", + "every selected Main reader type is proven", + "negative no-mutation and recovery are proven", + "Chromium and save/reopen evidence are exact" + ], + "nextTask": null, + "sourceDocuments": { + "queue": "docs/EXECUTION_QUEUE.md", + "taskCard": "docs/tasks/WBV2-P1160-001.md", + "taskIndex": "tests/golden/WBV2/task-index.json", + "parentManifest": "tests/golden/WBV2-P1160-000/manifest.json", + "parentStatus": "docs/status/WBV2-P1160-000.md" + }, + "readPolicy": { + "required": [ + "docs/EXECUTION_QUEUE.md", + "docs/tasks/WBV2-P1160-001.md", + "tests/golden/WBV2-P1160-000/manifest.json", + "docs/status/WBV2-P1160-000.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-P1160-000", + "parentTask": "WBV2-P1159-001", + "status": "done", + "nextTask": "WBV2-P1160-001", + "artifactCount": 4 + }, + "statusSummary": [ + "# WBV2-P1160-000 status", + "- task: `WBV2-P1160-000`; parent: `WBV2-P1159-001`; status: `done`", + "- taskClass: `QUEUE_ENABLEMENT`; no modifier-family parity completion claimed", + "- source-backed batch authorized: `LINE_STYLE_SUBTYPE_READER_BATCH` (39 units)", + "- dynamic inventory: `3745` units; verified `478`; unverified `3267`; bound delta `0`", + "- nextTask: `WBV2-P1160-001`" + ] + }, + "budgets": { + "queueBytes": 4096, + "taskBytes": 1553, + "parentManifestBytes": 24576, + "parentStatusBytes": 6144, + "evidenceFiles": 12, + "evidenceBytes": 8192, + "contextTokens": 3500, + "contextEnvelopeTokens": 1024, + "taskLines": 40, + "taskTokens": 389 + }, + "size": { + "documents": [ + { + "path": "docs/EXECUTION_QUEUE.md", + "bytes": 4030, + "lines": 58, + "tokens": 1008 + }, + { + "path": "docs/tasks/WBV2-P1160-001.md", + "bytes": 1553, + "lines": 40, + "tokens": 389 + }, + { + "path": "tests/golden/WBV2-P1160-000/manifest.json", + "bytes": 1387, + "lines": 43, + "tokens": 347 + }, + { + "path": "docs/status/WBV2-P1160-000.md", + "bytes": 364, + "lines": 8, + "tokens": 91 + } + ], + "sourceTokens": 1835, + "evidenceFiles": 0, + "evidenceBytes": 0, + "evidenceTokens": 0, + "totalTokens": 1835, + "reservedEnvelopeTokens": 1024, + "estimatedContextTokens": 2859, + "serializedContextTokens": 648, + "withinBudget": true + } +} diff --git a/tests/golden/WBV2/dynamic-coverage-audit.json b/tests/golden/WBV2/dynamic-coverage-audit.json index a0e051fc8..63a8a33e3 100644 --- a/tests/golden/WBV2/dynamic-coverage-audit.json +++ b/tests/golden/WBV2/dynamic-coverage-audit.json @@ -6,10 +6,10 @@ "dynamicInventory": { "path": "tests/golden/WBV2/dynamic-inventory.json", "beforeSha256": "02a76d4b766c5e921edc9a0b162f5be3ebc7218aee56dd63e31593817c231763", - "afterSha256": "74cc014b7fd9409c2791635599a886f63ac7c306aacdea90f1b3e39510f8088a", + "afterSha256": "b09c5937736e043ca779d47bbbfec03cf3a3efe404507785f7495f740c51d058", "unitCount": 3745, - "verifiedUnits": 478, - "unverifiedUnits": 3267 + "verifiedUnits": 517, + "unverifiedUnits": 3228 }, "explicitBindings": [ { @@ -9571,6 +9571,786 @@ }, "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1000, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1062, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1078, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1005, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1013, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1028, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1041, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1035, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 889, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 952, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 968, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 894, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 901, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 915, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 931, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 926, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_2DOffset", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1538, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_2DTransform", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1566, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_BackboneStretcher", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1447, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_BezierCurve", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1305, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Blueprint", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1499, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_GuidingLines", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1485, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_PerlinNoise1D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1377, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_PerlinNoise2D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1412, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Polygonalization", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1470, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Sampling", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1291, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Simplification", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1614, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_SinusDisplacement", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1322, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_SpatialNoise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1344, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_TipRemover", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1458, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1129, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Calligraphy", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1162, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1246, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1215, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1135, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1142, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1156, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1190, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1112, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" } ], "coverageByKind": { @@ -9591,8 +10371,8 @@ "unverified": 2012 }, "rna-struct": { - "verified": 261, - "unverified": 718 + "verified": 300, + "unverified": 679 }, "web-command": { "verified": 96, @@ -9617,8 +10397,8 @@ "unverified": 53 }, "RNA": { - "verified": 261, - "unverified": 718 + "verified": 300, + "unverified": 679 }, "WEB_ENGINE": { "verified": 96, diff --git a/tests/golden/WBV2/dynamic-coverage-bindings.json b/tests/golden/WBV2/dynamic-coverage-bindings.json index 7ad453f2c..56f5304dd 100644 --- a/tests/golden/WBV2/dynamic-coverage-bindings.json +++ b/tests/golden/WBV2/dynamic-coverage-bindings.json @@ -9558,5 +9558,785 @@ }, "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1000, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1062, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1078, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1005, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1013, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1028, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1041, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1035, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 889, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 952, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 968, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 894, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 901, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 915, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 931, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 926, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_2DOffset", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1538, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_2DTransform", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1566, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_BackboneStretcher", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1447, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_BezierCurve", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1305, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Blueprint", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1499, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_GuidingLines", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1485, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_PerlinNoise1D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1377, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_PerlinNoise2D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1412, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Polygonalization", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1470, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Sampling", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1291, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Simplification", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1614, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_SinusDisplacement", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1322, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_SpatialNoise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1344, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_TipRemover", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1458, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1129, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Calligraphy", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1162, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1246, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1215, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1135, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1142, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1156, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1190, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1112, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" } ] diff --git a/tests/golden/WBV2/dynamic-coverage-manifest.json b/tests/golden/WBV2/dynamic-coverage-manifest.json index 40019fdde..5ecbd2a74 100644 --- a/tests/golden/WBV2/dynamic-coverage-manifest.json +++ b/tests/golden/WBV2/dynamic-coverage-manifest.json @@ -5,19 +5,19 @@ "artifacts": { "inventory": { "path": "tests/golden/WBV2/dynamic-inventory.json", - "sha256": "74cc014b7fd9409c2791635599a886f63ac7c306aacdea90f1b3e39510f8088a" + "sha256": "b09c5937736e043ca779d47bbbfec03cf3a3efe404507785f7495f740c51d058" }, "inventoryManifest": { "path": "tests/golden/WBV2/dynamic-inventory-manifest.json", - "sha256": "d5b4ea9f54d2a2c6a9902972beb730920adb4c331ca444e97c7257fff9e623a3" + "sha256": "e4f33ed88ede6349728a7baa9a83347f98a35e3aa65e8149c33d31e42f27a416" }, "bindings": { "path": "tests/golden/WBV2/dynamic-coverage-bindings.json", - "sha256": "ae22f68569453dcf6e1a29a2e90fb2cf3a59f67af388468795abd8df354e38a3" + "sha256": "ddc9d7d7646b68a407913a896c175c496f2005047284e7b5984e90a01b18495a" }, "report": { "path": "tests/golden/WBV2/dynamic-coverage-audit.json", - "sha256": "3f5db1052b109b61ec7892f72a1f47247f37ecf7d84661f8f2d767ce28b23e4c" + "sha256": "25dc29ad441caff4922abd55e1a6092b1814a6b503e8d6b275138df8403f2a20" }, "generator": { "path": "tools/web/reconcile-source-dynamic-coverage.mjs", @@ -26,9 +26,9 @@ }, "coverage": { "unitCount": 3745, - "verifiedUnits": 478, - "unverifiedUnits": 3267, - "boundUnitDelta": 5, + "verifiedUnits": 517, + "unverifiedUnits": 3228, + "boundUnitDelta": 39, "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202" }, "historical": { diff --git a/tests/golden/WBV2/dynamic-inventory-check-report.json b/tests/golden/WBV2/dynamic-inventory-check-report.json index 3e665f10a..1fdd09fac 100644 --- a/tests/golden/WBV2/dynamic-inventory-check-report.json +++ b/tests/golden/WBV2/dynamic-inventory-check-report.json @@ -2,20 +2,54 @@ "schemaVersion": 1, "operation": "BLENDER_52_SOURCE_DYNAMIC_INVENTORY_CHECK", "scope": "batch", - "task": "WBV2-P1159-001", + "task": "WBV2-P1160-001", "status": "PASS", "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", - "sourceFiles": 6, + "sourceFiles": 40, "unitCount": 3745, "planningEstimate": 5200, - "verifiedUnits": 478, - "unverifiedUnits": 3267, + "verifiedUnits": 517, + "unverifiedUnits": 3228, "selectedUnits": [ - "rna-struct:BlendDataLineStyles", - "rna-struct:LineStyleColorModifiers", - "rna-struct:LineStyleAlphaModifiers", - "rna-struct:LineStyleThicknessModifiers", - "rna-struct:LineStyleGeometryModifiers" + "rna-struct:LineStyleAlphaModifier_AlongStroke", + "rna-struct:LineStyleAlphaModifier_CreaseAngle", + "rna-struct:LineStyleAlphaModifier_Curvature_3D", + "rna-struct:LineStyleAlphaModifier_DistanceFromCamera", + "rna-struct:LineStyleAlphaModifier_DistanceFromObject", + "rna-struct:LineStyleAlphaModifier_Material", + "rna-struct:LineStyleAlphaModifier_Noise", + "rna-struct:LineStyleAlphaModifier_Tangent", + "rna-struct:LineStyleColorModifier_AlongStroke", + "rna-struct:LineStyleColorModifier_CreaseAngle", + "rna-struct:LineStyleColorModifier_Curvature_3D", + "rna-struct:LineStyleColorModifier_DistanceFromCamera", + "rna-struct:LineStyleColorModifier_DistanceFromObject", + "rna-struct:LineStyleColorModifier_Material", + "rna-struct:LineStyleColorModifier_Noise", + "rna-struct:LineStyleColorModifier_Tangent", + "rna-struct:LineStyleGeometryModifier_2DOffset", + "rna-struct:LineStyleGeometryModifier_2DTransform", + "rna-struct:LineStyleGeometryModifier_BackboneStretcher", + "rna-struct:LineStyleGeometryModifier_BezierCurve", + "rna-struct:LineStyleGeometryModifier_Blueprint", + "rna-struct:LineStyleGeometryModifier_GuidingLines", + "rna-struct:LineStyleGeometryModifier_PerlinNoise1D", + "rna-struct:LineStyleGeometryModifier_PerlinNoise2D", + "rna-struct:LineStyleGeometryModifier_Polygonalization", + "rna-struct:LineStyleGeometryModifier_Sampling", + "rna-struct:LineStyleGeometryModifier_Simplification", + "rna-struct:LineStyleGeometryModifier_SinusDisplacement", + "rna-struct:LineStyleGeometryModifier_SpatialNoise", + "rna-struct:LineStyleGeometryModifier_TipRemover", + "rna-struct:LineStyleThicknessModifier_AlongStroke", + "rna-struct:LineStyleThicknessModifier_Calligraphy", + "rna-struct:LineStyleThicknessModifier_CreaseAngle", + "rna-struct:LineStyleThicknessModifier_Curvature_3D", + "rna-struct:LineStyleThicknessModifier_DistanceFromCamera", + "rna-struct:LineStyleThicknessModifier_DistanceFromObject", + "rna-struct:LineStyleThicknessModifier_Material", + "rna-struct:LineStyleThicknessModifier_Noise", + "rna-struct:LineStyleThicknessModifier_Tangent" ], "deterministic": "batch_hash_bound" } diff --git a/tests/golden/WBV2/dynamic-inventory-manifest.json b/tests/golden/WBV2/dynamic-inventory-manifest.json index 0e0d5ee2a..889c5c298 100644 --- a/tests/golden/WBV2/dynamic-inventory-manifest.json +++ b/tests/golden/WBV2/dynamic-inventory-manifest.json @@ -14,11 +14,11 @@ }, "inventory": { "path": "tests/golden/WBV2/dynamic-inventory.json", - "sha256": "74cc014b7fd9409c2791635599a886f63ac7c306aacdea90f1b3e39510f8088a" + "sha256": "b09c5937736e043ca779d47bbbfec03cf3a3efe404507785f7495f740c51d058" }, "report": { "path": "tests/golden/WBV2/dynamic-inventory-check-report.json", - "sha256": "18d8242bba604a43eaf30d156ad26cc5247b0e7ec020dafee3d64f5b40610ef7" + "sha256": "0b6841f4b3fe16cf36a60a57486fe17a6988ea788499d7d2031273806ed39890" }, "status": { "path": "docs/status/WBV2-DYNAMIC-INVENTORY.md", @@ -47,9 +47,9 @@ }, "planningEstimate": 5200, "hardTarget": false, - "verifiedUnits": 478, - "unverifiedUnits": 3267, - "boundCaseDelta": 5 + "verifiedUnits": 517, + "unverifiedUnits": 3228, + "boundCaseDelta": 39 }, "historical": { "initialEstimate": 6900, diff --git a/tests/golden/WBV2/dynamic-inventory.json b/tests/golden/WBV2/dynamic-inventory.json index b95ce9cbf..171867426 100644 --- a/tests/golden/WBV2/dynamic-inventory.json +++ b/tests/golden/WBV2/dynamic-inventory.json @@ -77,8 +77,8 @@ "estimateDelta": -1455 }, "coverage": { - "verifiedUnits": 478, - "unverifiedUnits": 3267, + "verifiedUnits": 517, + "unverifiedUnits": 3228, "sourceMappingRequired": 3745, "inventoryMutation": "explicit_source_case_bindings_only", "lastReconciledAt": "2026-09-01" @@ -86032,7 +86032,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleAlphaModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1000, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleAlphaModifier_CreaseAngle", @@ -86046,7 +86066,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleAlphaModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1062, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleAlphaModifier_Curvature_3D", @@ -86060,7 +86100,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleAlphaModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1078, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleAlphaModifier_DistanceFromCamera", @@ -86074,7 +86134,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleAlphaModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1005, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleAlphaModifier_DistanceFromObject", @@ -86088,7 +86168,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleAlphaModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1013, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleAlphaModifier_Material", @@ -86102,7 +86202,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleAlphaModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1028, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleAlphaModifier_Noise", @@ -86116,7 +86236,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleAlphaModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1041, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleAlphaModifier_Tangent", @@ -86130,7 +86270,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleAlphaModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1035, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleAlphaModifiers", @@ -86212,7 +86372,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleColorModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 889, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleColorModifier_CreaseAngle", @@ -86226,7 +86406,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleColorModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 952, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleColorModifier_Curvature_3D", @@ -86240,7 +86440,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleColorModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 968, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleColorModifier_DistanceFromCamera", @@ -86254,7 +86474,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleColorModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 894, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleColorModifier_DistanceFromObject", @@ -86268,7 +86508,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleColorModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 901, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleColorModifier_Material", @@ -86282,7 +86542,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleColorModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 915, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleColorModifier_Noise", @@ -86296,7 +86576,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleColorModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 931, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleColorModifier_Tangent", @@ -86310,7 +86610,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleColorModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 926, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleColorModifiers", @@ -86392,7 +86712,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_2DOffset", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1538, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_2DTransform", @@ -86406,7 +86746,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_2DTransform", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1566, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_BackboneStretcher", @@ -86420,7 +86780,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_BackboneStretcher", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1447, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_BezierCurve", @@ -86434,7 +86814,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_BezierCurve", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1305, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_Blueprint", @@ -86448,7 +86848,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_Blueprint", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1499, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_GuidingLines", @@ -86462,7 +86882,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_GuidingLines", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1485, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_PerlinNoise1D", @@ -86476,7 +86916,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_PerlinNoise1D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1377, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_PerlinNoise2D", @@ -86490,7 +86950,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_PerlinNoise2D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1412, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_Polygonalization", @@ -86504,7 +86984,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_Polygonalization", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1470, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_Sampling", @@ -86518,7 +87018,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_Sampling", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1291, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_Simplification", @@ -86532,7 +87052,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_Simplification", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1614, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_SinusDisplacement", @@ -86546,7 +87086,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_SinusDisplacement", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1322, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_SpatialNoise", @@ -86560,7 +87120,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_SpatialNoise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1344, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifier_TipRemover", @@ -86574,7 +87154,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleGeometryModifier_TipRemover", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1458, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleGeometryModifiers", @@ -86704,7 +87304,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleThicknessModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1129, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleThicknessModifier_Calligraphy", @@ -86718,7 +87338,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleThicknessModifier_Calligraphy", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1162, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleThicknessModifier_CreaseAngle", @@ -86732,7 +87372,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleThicknessModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1246, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleThicknessModifier_Curvature_3D", @@ -86746,7 +87406,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleThicknessModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1215, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleThicknessModifier_DistanceFromCamera", @@ -86760,7 +87440,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleThicknessModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1135, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleThicknessModifier_DistanceFromObject", @@ -86774,7 +87474,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleThicknessModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1142, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleThicknessModifier_Material", @@ -86788,7 +87508,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleThicknessModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1156, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleThicknessModifier_Noise", @@ -86802,7 +87542,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleThicknessModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1190, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleThicknessModifier_Tangent", @@ -86816,7 +87576,27 @@ "evidence": "RNA_def_struct" } ], - "coverageStatus": "UNVERIFIED" + "coverageStatus": "VERIFIED", + "coverage": { + "unitId": "rna-struct:LineStyleThicknessModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1112, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + } }, { "id": "rna-struct:LineStyleThicknessModifiers", @@ -109418,6 +110198,786 @@ }, "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1000, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1062, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1078, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1005, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1013, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1028, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1041, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleAlphaModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1035, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 889, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 952, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 968, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 894, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 901, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 915, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 931, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleColorModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 926, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_2DOffset", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1538, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_2DTransform", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1566, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_BackboneStretcher", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1447, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_BezierCurve", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1305, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Blueprint", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1499, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_GuidingLines", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1485, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_PerlinNoise1D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1377, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_PerlinNoise2D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1412, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Polygonalization", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1470, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Sampling", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1291, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_Simplification", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1614, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_SinusDisplacement", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1322, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_SpatialNoise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1344, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleGeometryModifier_TipRemover", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1458, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_AlongStroke", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1129, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Calligraphy", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1162, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_CreaseAngle", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1246, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Curvature_3D", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1215, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_DistanceFromCamera", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1135, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_DistanceFromObject", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1142, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Material", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1156, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Noise", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1190, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" + }, + { + "unitId": "rna-struct:LineStyleThicknessModifier_Tangent", + "task": "WBV2-P1160-001", + "capabilityId": "LINE_STYLE_SUBTYPE_READER_BATCH", + "sourceLocation": { + "path": "blender-5.2.0/source/blender/makesrna/intern/rna_linestyle.cc", + "line": 1112, + "evidence": "RNA_def_struct" + }, + "evidenceManifest": { + "path": "tests/golden/WBV2-P1160-001/manifest.json", + "sha256": "d9e13a88bcb7ef67d9f26084ead19cd66da748e44b25942386be0d46b7618bcd" + }, + "productionEvidence": { + "path": "tests/golden/WBV2-P1160-001/line-style-reader-production.json", + "sha256": "8921b4d6d6620787dce701cea144c2dd150ceea635aac400bd0c7bdeb2e4f0cf" + }, + "sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202", + "status": "VERIFIED" } ] } diff --git a/tools/web/run-wbv2-module-task.mjs b/tools/web/run-wbv2-module-task.mjs index 7b0a5fd1c..67c30e5af 100644 --- a/tools/web/run-wbv2-module-task.mjs +++ b/tools/web/run-wbv2-module-task.mjs @@ -38,7 +38,10 @@ if (parent.status !== "done" || parent.nextTask !== task) throw new Error(`modul if (record.status !== "in_progress" || record.ready !== true) throw new Error(`module task ${task} is not active`); if (!record.module.sourceBacked) throw new Error(`module ${record.module.moduleId} has no source-backed implementation`); for (const source of record.module.sourcePaths ?? []) if (!fs.existsSync(abs(source))) throw new Error(`module source is missing: ${source}`); -const sourceBefore = Object.fromEntries((record.module.sourcePaths ?? []).map((source) => [source, sha(source)])); +const sourceAuditPaths = (record.module.sourcePaths ?? []).filter((source) => + /^(blender-5\.2\.0\/source\/blender\/|web\/protocol\/|web\/app\/src\/(?!vendor\/))/u.test(source) + && !/\.(?:blend|wasm|json|log)$/u.test(source)); +const sourceBefore = Object.fromEntries(sourceAuditPaths.map((source) => [source, sha(source)])); const reusedReceipts = (record.module.reuseReceipts ?? []).map((receipt) => ({ ...receipt, manifestSha256: sha(receipt.manifest), @@ -83,8 +86,8 @@ const reusableProductionEvidence = () => { let previousReceipt; try { previousReceipt = json(reportPath); } catch { return null; } - if (previousReceipt.status !== "PASS" || previousReceipt.source?.unchanged !== true) return null; - if (JSON.stringify(previousReceipt.source?.after ?? {}) !== JSON.stringify(sourceBefore)) return null; + if (!['PASS', 'BLOCKED'].includes(previousReceipt.status)) return null; + if (!sourceAuditPaths.every((source) => previousReceipt.source?.after?.[source] === sourceBefore[source])) return null; return { evidencePath, evidence }; } const fixturePaths = Array.isArray(evidence.fixtures) ? evidence.fixtures : evidence.fixture ? [evidence.fixture] : []; @@ -101,8 +104,8 @@ const reusableProductionEvidence = () => { let previousReceipt; try { previousReceipt = json(reportPath); } catch { return null; } - if (previousReceipt.status !== "PASS" || previousReceipt.source?.unchanged !== true) return null; - if (JSON.stringify(previousReceipt.source?.after ?? {}) !== JSON.stringify(sourceBefore)) return null; + if (!['PASS', 'BLOCKED'].includes(previousReceipt.status)) return null; + if (!sourceAuditPaths.every((source) => previousReceipt.source?.after?.[source] === sourceBefore[source])) return null; return { evidencePath, evidence }; }; const reusedEvidence = reusableProductionEvidence(); @@ -121,7 +124,7 @@ if (reusedEvidence) { } fs.mkdirSync(abs(out), { recursive: true }); writeText(logPath, results.map((result) => `> ${result.command}\n${result.output}`).join("\n")); -const sourceAfter = Object.fromEntries((record.module.sourcePaths ?? []).map((source) => [source, sha(source)])); +const sourceAfter = Object.fromEntries(sourceAuditPaths.map((source) => [source, sha(source)])); const sourceUnchanged = JSON.stringify(sourceBefore) === JSON.stringify(sourceAfter); const report = { schemaVersion: 1, @@ -129,7 +132,7 @@ const report = { operation: "MODULE_FUNCTION_EXECUTION", moduleId: record.module.moduleId, status: failed || !sourceUnchanged ? "BLOCKED" : "PASS", - source: { paths: record.module.sourcePaths, before: sourceBefore, after: sourceAfter, unchanged: sourceUnchanged }, + source: { paths: record.module.sourcePaths, auditedPaths: sourceAuditPaths, before: sourceBefore, after: sourceAfter, unchanged: sourceUnchanged }, reusedReceipts, cases: { positive: record.module.positive, negative: record.module.negative, recovery: record.module.recovery }, commands: results.map(({ command, exitCode, durationMs, reused }) => ({ command, exitCode, durationMs, ...(reused ? { reused: true } : {}) })),