Capture M16 gap execution artifacts
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-08-21 21:09:40 -04:00
parent e8ce4f5d0c
commit 46c9ebfcb6
339 changed files with 20028 additions and 108 deletions

View File

@@ -136,5 +136,39 @@
"operator:action.select_by_type",
"operator:action.select_circle",
"operator:action.select_column",
"operator:action.select_lasso"
"operator:action.select_lasso",
"operator:action.select_leftright",
"operator:action.select_less",
"operator:action.select_linked",
"operator:action.select_more",
"operator:action.snap",
"operator:action.stash",
"operator:action.stash_and_create",
"operator:action.unlink",
"operator:action.view_all",
"operator:action.view_frame",
"operator:action.view_selected",
"operator:anim.change_frame",
"operator:anim.channel_select_keys",
"operator:anim.channel_view_pick",
"operator:anim.channels_bake",
"operator:anim.channels_clean_empty",
"operator:anim.channels_click",
"operator:anim.channels_collapse",
"operator:anim.channels_delete",
"operator:anim.channels_editable_toggle",
"operator:anim.channels_expand",
"operator:anim.channels_fcurves_enable",
"operator:anim.channels_group",
"operator:anim.channels_move",
"operator:anim.channels_rename",
"operator:anim.channels_select_all",
"operator:anim.channels_select_box",
"operator:anim.channels_select_filter",
"operator:anim.channels_setting_disable",
"operator:anim.channels_setting_enable",
"operator:anim.channels_setting_toggle",
"operator:anim.channels_ungroup",
"operator:anim.channels_view_selected",
"operator:anim.clear_useless_actions"
]

View File

@@ -13,14 +13,14 @@
},
"completions": {
"path": "tests/golden/M15-03A/completed-gap-tasks.json",
"sha256": "bb40f03bb78882f60f31025dbc7b903bc90978fd5a916cc45c2147cd755a3631"
"sha256": "f725118ea1118cd9cedcc5170a45674579ef7931b6a11594cf593646ca6fda9b"
}
},
"summary": {
"taskCount": 6900,
"active": 1,
"pending": 6761,
"completed": 138,
"pending": 6727,
"completed": 172,
"blocked": 0,
"byWave": {
"M16": 2667,
@@ -3212,7 +3212,7 @@
"gapId": "operator:action.select_leftright",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "active",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3235,7 +3235,7 @@
"gapId": "operator:action.select_less",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3258,7 +3258,7 @@
"gapId": "operator:action.select_linked",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3281,7 +3281,7 @@
"gapId": "operator:action.select_more",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3304,7 +3304,7 @@
"gapId": "operator:action.snap",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3327,7 +3327,7 @@
"gapId": "operator:action.stash",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3350,7 +3350,7 @@
"gapId": "operator:action.stash_and_create",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3373,7 +3373,7 @@
"gapId": "operator:action.unlink",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3396,7 +3396,7 @@
"gapId": "operator:action.view_all",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3419,7 +3419,7 @@
"gapId": "operator:action.view_frame",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3442,7 +3442,7 @@
"gapId": "operator:action.view_selected",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3465,7 +3465,7 @@
"gapId": "operator:anim.change_frame",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3488,7 +3488,7 @@
"gapId": "operator:anim.channel_select_keys",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3511,7 +3511,7 @@
"gapId": "operator:anim.channel_view_pick",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3534,7 +3534,7 @@
"gapId": "operator:anim.channels_bake",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3557,7 +3557,7 @@
"gapId": "operator:anim.channels_clean_empty",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3580,7 +3580,7 @@
"gapId": "operator:anim.channels_click",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3603,7 +3603,7 @@
"gapId": "operator:anim.channels_collapse",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3626,7 +3626,7 @@
"gapId": "operator:anim.channels_delete",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3649,7 +3649,7 @@
"gapId": "operator:anim.channels_editable_toggle",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3672,7 +3672,7 @@
"gapId": "operator:anim.channels_expand",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3695,7 +3695,7 @@
"gapId": "operator:anim.channels_fcurves_enable",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3718,7 +3718,7 @@
"gapId": "operator:anim.channels_group",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3741,7 +3741,7 @@
"gapId": "operator:anim.channels_move",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3764,7 +3764,7 @@
"gapId": "operator:anim.channels_rename",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3787,7 +3787,7 @@
"gapId": "operator:anim.channels_select_all",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3810,7 +3810,7 @@
"gapId": "operator:anim.channels_select_box",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3833,7 +3833,7 @@
"gapId": "operator:anim.channels_select_filter",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3856,7 +3856,7 @@
"gapId": "operator:anim.channels_setting_disable",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3879,7 +3879,7 @@
"gapId": "operator:anim.channels_setting_enable",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3902,7 +3902,7 @@
"gapId": "operator:anim.channels_setting_toggle",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3925,7 +3925,7 @@
"gapId": "operator:anim.channels_ungroup",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3948,7 +3948,7 @@
"gapId": "operator:anim.channels_view_selected",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3971,7 +3971,7 @@
"gapId": "operator:anim.clear_useless_actions",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -3994,7 +3994,7 @@
"gapId": "operator:anim.copy_driver_button",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "completed",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -4017,7 +4017,7 @@
"gapId": "operator:anim.driver_button_add",
"ownerFamily": "OPERATOR",
"sourceTask": "M15-01B",
"state": "pending",
"state": "active",
"dependencies": [],
"targetImplementationClass": "LOCAL_EXACT",
"fixture": {
@@ -158734,7 +158734,7 @@
]
}
],
"firstTask": "M16-GAP-00139",
"firstTask": "M16-GAP-00174",
"closureGate": "M15-03E",
"nextTask": "M15-03B"
}

View File

@@ -136,42 +136,42 @@
{"id":"M16-GAP-00136","gapId":"operator:action.select_circle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00137","gapId":"operator:action.select_column","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00138","gapId":"operator:action.select_lasso","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00139","gapId":"operator:action.select_leftright","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"active","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00140","gapId":"operator:action.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00141","gapId":"operator:action.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00142","gapId":"operator:action.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00143","gapId":"operator:action.snap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00144","gapId":"operator:action.stash","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00145","gapId":"operator:action.stash_and_create","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00146","gapId":"operator:action.unlink","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00147","gapId":"operator:action.view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00148","gapId":"operator:action.view_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00149","gapId":"operator:action.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00150","gapId":"operator:anim.change_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00151","gapId":"operator:anim.channel_select_keys","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00152","gapId":"operator:anim.channel_view_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00153","gapId":"operator:anim.channels_bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00154","gapId":"operator:anim.channels_clean_empty","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00155","gapId":"operator:anim.channels_click","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00156","gapId":"operator:anim.channels_collapse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00157","gapId":"operator:anim.channels_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00158","gapId":"operator:anim.channels_editable_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00159","gapId":"operator:anim.channels_expand","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00160","gapId":"operator:anim.channels_fcurves_enable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00161","gapId":"operator:anim.channels_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00162","gapId":"operator:anim.channels_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00163","gapId":"operator:anim.channels_rename","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00164","gapId":"operator:anim.channels_select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00165","gapId":"operator:anim.channels_select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00166","gapId":"operator:anim.channels_select_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00167","gapId":"operator:anim.channels_setting_disable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00168","gapId":"operator:anim.channels_setting_enable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00169","gapId":"operator:anim.channels_setting_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00170","gapId":"operator:anim.channels_ungroup","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00171","gapId":"operator:anim.channels_view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00172","gapId":"operator:anim.clear_useless_actions","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00173","gapId":"operator:anim.copy_driver_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00174","gapId":"operator:anim.driver_button_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00139","gapId":"operator:action.select_leftright","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00140","gapId":"operator:action.select_less","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00141","gapId":"operator:action.select_linked","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00142","gapId":"operator:action.select_more","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00143","gapId":"operator:action.snap","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00144","gapId":"operator:action.stash","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00145","gapId":"operator:action.stash_and_create","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00146","gapId":"operator:action.unlink","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00147","gapId":"operator:action.view_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00148","gapId":"operator:action.view_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00149","gapId":"operator:action.view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00150","gapId":"operator:anim.change_frame","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00151","gapId":"operator:anim.channel_select_keys","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00152","gapId":"operator:anim.channel_view_pick","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00153","gapId":"operator:anim.channels_bake","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00154","gapId":"operator:anim.channels_clean_empty","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00155","gapId":"operator:anim.channels_click","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00156","gapId":"operator:anim.channels_collapse","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00157","gapId":"operator:anim.channels_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00158","gapId":"operator:anim.channels_editable_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00159","gapId":"operator:anim.channels_expand","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00160","gapId":"operator:anim.channels_fcurves_enable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00161","gapId":"operator:anim.channels_group","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00162","gapId":"operator:anim.channels_move","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00163","gapId":"operator:anim.channels_rename","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00164","gapId":"operator:anim.channels_select_all","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00165","gapId":"operator:anim.channels_select_box","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00166","gapId":"operator:anim.channels_select_filter","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00167","gapId":"operator:anim.channels_setting_disable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00168","gapId":"operator:anim.channels_setting_enable","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00169","gapId":"operator:anim.channels_setting_toggle","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00170","gapId":"operator:anim.channels_ungroup","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00171","gapId":"operator:anim.channels_view_selected","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00172","gapId":"operator:anim.clear_useless_actions","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00173","gapId":"operator:anim.copy_driver_button","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00174","gapId":"operator:anim.driver_button_add","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"active","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00175","gapId":"operator:anim.driver_button_edit","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00176","gapId":"operator:anim.driver_button_remove","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00177","gapId":"operator:anim.end_frame_set","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,61 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location",
"selected": [
true,
true,
false
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location",
"selected": [
true,
true,
false
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location",
"selected": [
true,
true,
false
]
}
],
"name": "WebGapSelectLeftRightObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend",
"fixtureSha256": "ed6f8c69f70b5dcef868fffc9381395c7884401bbe24fdd8d9984557284e66c9",
"mode": "LEFT",
"operation": "ACTION_SELECT_LEFTRIGHT_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"selectedFrames": [
1,
3
],
"task": "M16-GAP-00139"
}

View File

@@ -0,0 +1,42 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00139",
"operation": "ACTION_SELECT_LEFTRIGHT_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend",
"sha256": "ed6f8c69f70b5dcef868fffc9381395c7884401bbe24fdd8d9984557284e66c9"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapSelectLeftRightObjectAction:object:WebGapSelectLeftRightObject",
"mode": "LEFT",
"selectedFrames": [
1,
3
],
"selectedPerChannel": [
[
1,
3
],
[
1,
3
],
[
1,
3
]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00140"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00139",
"parentTask": "M16-GAP-00138",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_SELECT_LEFTRIGHT_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00138/manifest.json", "sha256": "164d1020de2e126f1e0736b508a18bf261c7610b375fe02dbfccb3422e27ff13"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend", "sha256": "ed6f8c69f70b5dcef868fffc9381395c7884401bbe24fdd8d9984557284e66c9"},
"generator": {"path": "tools/web/generated/M16-GAP-00139.py", "sha256": "d1175acf47e8ec1c4998582e22d9434a4eea921f551b6c99f9b85b7f5a6727be"},
"desktopChecker": {"path": "tools/web/check-action-select-leftright-desktop.py", "sha256": "bf20b5d05883481b1b455d0eaab9951f9c4abc73406f3a499f1a03c49b044832"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ae898c2ff5ff3d622f348ba21d83ff91e10d4d26809207966fef8895f81b09f1"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00139/action-select-leftright-desktop-report.json", "sha256": "7caa17c7eb256a4bea4e95d03edd3e2b3a31286fd30581188915fca174a89f56"},
"webReport": {"path": "tests/golden/M16-GAP-00139/action-select-leftright-local-exact-report.json", "sha256": "70476940cd710d7ac0305d1caa428e9b0ac7f71a8e7f55900139c94be7433ee2"},
"taskContext": {"path": "tests/golden/M16-GAP-00139/task-context.json", "sha256": "70af07e854ffebad8dcf9403c3485732c25b7100062b49a0bf1f16fb9b730bbb"}
},
"nextTask": "M16-GAP-00140"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00139",
"parentTask": "M16-GAP-00138",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.select_leftright data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.select_leftright",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00139.py -- tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00139",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00139"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00139.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3176,
"contextRemainingTokens": 793
},
"source": {
"bytes": 6728,
"tokens": 1683
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00139.py",
"bytes": 2305,
"tokens": 577
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00139-operator-action.select_leftright.blend",
"bytes": 86867,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 224767,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 237188,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00139/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00139.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00139/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2305,
"tokens": 577
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00140",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00139.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00138/manifest.json",
"parentStatus": "docs/status/M16-GAP-00138.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00139.md",
"tests/golden/M16-GAP-00138/manifest.json",
"docs/status/M16-GAP-00138.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00138",
"parentTask": "M16-GAP-00137",
"status": "done",
"nextTask": "M16-GAP-00139",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00138 Status",
"status: done",
"task: action.select_lasso operator LOCAL_EXACT slice",
"updated: 2026-08-20 America/New_York",
"scope:",
"- Action Editor lasso selection on `object:WebGapSelectLassoObject`.",
"evidence:",
"- Blender desktop and WASM/Main expose matching three location channels with frame 3 selected."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1804,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 451
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00139.md",
"bytes": 1804,
"lines": 38,
"tokens": 451
},
{
"path": "tests/golden/M16-GAP-00138/manifest.json",
"bytes": 2217,
"lines": 26,
"tokens": 555
},
{
"path": "docs/status/M16-GAP-00138.md",
"bytes": 539,
"lines": 18,
"tokens": 135
}
],
"sourceTokens": 1683,
"evidenceFiles": 1,
"evidenceBytes": 2305,
"evidenceTokens": 577,
"totalTokens": 2260,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3284,
"serializedContextTokens": 756,
"withinBudget": true
}
}

View File

@@ -0,0 +1,57 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location",
"selected": [
false,
true,
false
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location",
"selected": [
false,
true,
false
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location",
"selected": [
false,
true,
false
]
}
],
"name": "WebGapSelectLessObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend",
"fixtureSha256": "3acc7908b362f9c224e825c5429b59d549a77dab4e2b45b285221e5c54fa0c2b",
"operation": "ACTION_SELECT_LESS_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"selectedFrame": 3,
"task": "M16-GAP-00140"
}

View File

@@ -0,0 +1,35 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00140",
"operation": "ACTION_SELECT_LESS_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend",
"sha256": "3acc7908b362f9c224e825c5429b59d549a77dab4e2b45b285221e5c54fa0c2b"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00140/action-select-less-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapSelectLessObjectAction:object:WebGapSelectLessObject",
"selectedFrame": 3,
"selectedPerChannel": [
[
3
],
[
3
],
[
3
]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00141"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00140",
"parentTask": "M16-GAP-00139",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_SELECT_LESS_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00139/manifest.json", "sha256": "f534007c6619c059eaeb7aec81215d560b37009f89938823cd73370803919fab"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend", "sha256": "3acc7908b362f9c224e825c5429b59d549a77dab4e2b45b285221e5c54fa0c2b"},
"generator": {"path": "tools/web/generated/M16-GAP-00140.py", "sha256": "62fe22db41e856439c50c542d0a62b6db4fbfc80facedf625ba58291d3b4a928"},
"desktopChecker": {"path": "tools/web/check-action-select-less-desktop.py", "sha256": "52a4f3d5f5232f5843612286b35db8fb19050b8610c573a1bdcbbdae627d261f"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "45d5b93b987792feb203d53dccaf2ac81b858d503ac5ed4716e160650ead512b"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00140/action-select-less-desktop-report.json", "sha256": "f8527dd5d6d953fbda5b86bb1f42d6257b244a50296ceeb074c57a7b007a3aef"},
"webReport": {"path": "tests/golden/M16-GAP-00140/action-select-less-local-exact-report.json", "sha256": "243dedadaa9776d7195883a99689e4cb8ee07599bf6c9786aaf8ee5910135e17"},
"taskContext": {"path": "tests/golden/M16-GAP-00140/task-context.json", "sha256": "fc860324c53484ebaa1b1266cf51530abf10645c7e4546db5a495a25778ed03d"}
},
"nextTask": "M16-GAP-00141"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00140",
"parentTask": "M16-GAP-00139",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.select_less data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.select_less",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00140.py -- tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00140",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00140"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00140.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3132,
"contextRemainingTokens": 782
},
"source": {
"bytes": 6772,
"tokens": 1694
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00140.py",
"bytes": 2195,
"tokens": 549
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00140-operator-action.select_less.blend",
"bytes": 86865,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 224767,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 240756,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00140/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00140.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00140/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2195,
"tokens": 549
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00141",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00140.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00139/manifest.json",
"parentStatus": "docs/status/M16-GAP-00139.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00140.md",
"tests/golden/M16-GAP-00139/manifest.json",
"docs/status/M16-GAP-00139.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00139",
"parentTask": "M16-GAP-00138",
"status": "done",
"nextTask": "M16-GAP-00140",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00139 Status",
"status: done",
"task: action.select_leftright operator LOCAL_EXACT slice",
"updated: 2026-08-20 America/New_York",
"scope:",
"- Action Editor left-side selection on `object:WebGapSelectLeftRightObject`, using `mode=LEFT` at frame 3.",
"evidence:",
"- Blender desktop and WASM/Main expose matching three location channels with frames 1 and 3 selected."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1779,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 445
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00140.md",
"bytes": 1779,
"lines": 38,
"tokens": 445
},
{
"path": "tests/golden/M16-GAP-00139/manifest.json",
"bytes": 2237,
"lines": 26,
"tokens": 560
},
{
"path": "docs/status/M16-GAP-00139.md",
"bytes": 588,
"lines": 18,
"tokens": 147
}
],
"sourceTokens": 1694,
"evidenceFiles": 1,
"evidenceBytes": 2195,
"evidenceTokens": 549,
"totalTokens": 2243,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3267,
"serializedContextTokens": 753,
"withinBudget": true
}
}

View File

@@ -0,0 +1,62 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location",
"selected": [
true,
true,
true
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location",
"selected": [
true,
true,
true
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location",
"selected": [
true,
true,
true
]
}
],
"name": "WebGapSelectLinkedObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend",
"fixtureSha256": "62ddf7e0141f7bf5b0bfbf85b8faa0cb0ae602681f70e2c5e979db033b14056f",
"operation": "ACTION_SELECT_LINKED_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"selectedChannel": "location[0]",
"selectedFrames": [
1,
3,
5
],
"task": "M16-GAP-00141"
}

View File

@@ -0,0 +1,46 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00141",
"operation": "ACTION_SELECT_LINKED_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend",
"sha256": "62ddf7e0141f7bf5b0bfbf85b8faa0cb0ae602681f70e2c5e979db033b14056f"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapSelectLinkedObjectAction:object:WebGapSelectLinkedObject",
"selectedChannel": "location[0]",
"selectedFrames": [
1,
3,
5
],
"selectedPerChannel": [
[
1,
3,
5
],
[
1,
3,
5
],
[
1,
3,
5
]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00142"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00141",
"parentTask": "M16-GAP-00140",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_SELECT_LINKED_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00140/manifest.json", "sha256": "218516d7a1a3b9f28799dea042f41861cae9c1343e8e6bfae4939b6bdb169935"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend", "sha256": "62ddf7e0141f7bf5b0bfbf85b8faa0cb0ae602681f70e2c5e979db033b14056f"},
"generator": {"path": "tools/web/generated/M16-GAP-00141.py", "sha256": "3e27b0fffe763b6526e4e32fa9b40aae72f229038e846237b90e72312aa1a8eb"},
"desktopChecker": {"path": "tools/web/check-action-select-linked-desktop.py", "sha256": "4a1baae0c4add326934d50647d014248b43acf8e7ad90360921e1a487c25b150"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "1775105b3fe1650933326d6d49290edd3d0a15b8542a15ac202346260a49c10d"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00141/action-select-linked-desktop-report.json", "sha256": "7072809e5ceef8161b75594deaaf809e31ea01a67ef6261ac2d9e9fabbb5e296"},
"webReport": {"path": "tests/golden/M16-GAP-00141/action-select-linked-local-exact-report.json", "sha256": "261490656ea23b3c1800ca523a9d00911347b7f46e40b7b1d16e693470ddc8d4"},
"taskContext": {"path": "tests/golden/M16-GAP-00141/task-context.json", "sha256": "cf032562d9fc471a6a72b2e8dc50021e383ddc0fd628fca14e971647b64c5ad6"}
},
"nextTask": "M16-GAP-00142"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00141",
"parentTask": "M16-GAP-00140",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.select_linked data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.select_linked",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00141.py -- tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00141",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00141"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00141.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3162,
"contextRemainingTokens": 789
},
"source": {
"bytes": 6742,
"tokens": 1687
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00141.py",
"bytes": 2274,
"tokens": 569
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00141-operator-action.select_linked.blend",
"bytes": 86861,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 224767,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 244499,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00141/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00141.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00141/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2274,
"tokens": 569
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00142",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00141.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00140/manifest.json",
"parentStatus": "docs/status/M16-GAP-00140.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00141.md",
"tests/golden/M16-GAP-00140/manifest.json",
"docs/status/M16-GAP-00140.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00140",
"parentTask": "M16-GAP-00139",
"status": "done",
"nextTask": "M16-GAP-00141",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00140 Status",
"status: done",
"task: action.select_less operator LOCAL_EXACT slice",
"updated: 2026-08-20 America/New_York",
"scope:",
"- Action Editor selection-island shrinking on `object:WebGapSelectLessObject`.",
"evidence:",
"- Blender desktop and WASM/Main expose matching three location channels with only frame 3 selected after `select_less`."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1789,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 448
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00141.md",
"bytes": 1789,
"lines": 38,
"tokens": 448
},
{
"path": "tests/golden/M16-GAP-00140/manifest.json",
"bytes": 2212,
"lines": 26,
"tokens": 553
},
{
"path": "docs/status/M16-GAP-00140.md",
"bytes": 573,
"lines": 18,
"tokens": 144
}
],
"sourceTokens": 1687,
"evidenceFiles": 1,
"evidenceBytes": 2274,
"evidenceTokens": 569,
"totalTokens": 2256,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3280,
"serializedContextTokens": 754,
"withinBudget": true
}
}

View File

@@ -0,0 +1,74 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location",
"selected": [
true,
true,
true
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location",
"selected": [
true,
true,
true
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location",
"selected": [
true,
true,
true
]
}
],
"name": "WebGapSelectMoreObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend",
"fixtureSha256": "9f0a3fad228c1a7200cd9ac76af24fb8a853dd261f49ef2186491690713ec726",
"operation": "ACTION_SELECT_MORE_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"selectedChannel": "location[0]",
"selectedPerChannel": [
[
1,
3,
5
],
[
1,
3,
5
],
[
1,
3,
5
]
],
"task": "M16-GAP-00142"
}

View File

@@ -0,0 +1,41 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00142",
"operation": "ACTION_SELECT_MORE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend",
"sha256": "9f0a3fad228c1a7200cd9ac76af24fb8a853dd261f49ef2186491690713ec726"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00142/action-select-more-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapSelectMoreObjectAction:object:WebGapSelectMoreObject",
"selectedChannel": "location[0]",
"selectedPerChannel": [
[
1,
3,
5
],
[
1,
3,
5
],
[
1,
3,
5
]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00143"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00142",
"parentTask": "M16-GAP-00141",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_SELECT_MORE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00141/manifest.json", "sha256": "96756fb16e9731f2b7f217993ad6c2126d58fd5fd17bd71d1df55c0b463f4ddb"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend", "sha256": "9f0a3fad228c1a7200cd9ac76af24fb8a853dd261f49ef2186491690713ec726"},
"generator": {"path": "tools/web/generated/M16-GAP-00142.py", "sha256": "36dc0cf95dae703e72f8071625b94617e8d13a1845dc148835b5584625281d16"},
"desktopChecker": {"path": "tools/web/check-action-select-more-desktop.py", "sha256": "7bfff8a2113d7933e76c0339232810c8cd43d1a633eee7832acb4c4069790f5b"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "61254d77bac838d4a488a5152e3ba176a66bd49ea9a79e611e2e7de41f0a1bb8"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00142/action-select-more-desktop-report.json", "sha256": "56944dfcacb924d7650b8652e52bfc254fb1673b40b04109a57f69ad67e3fe9a"},
"webReport": {"path": "tests/golden/M16-GAP-00142/action-select-more-local-exact-report.json", "sha256": "91f1ef2bf23e75b681beea332836b359da9daf1902b8d77cb683b0e1657562a0"},
"taskContext": {"path": "tests/golden/M16-GAP-00142/task-context.json", "sha256": "727493f7483e1fc0c42a516da51e469393881b5d15c5c362f04138bcd4c6944e"}
},
"nextTask": "M16-GAP-00143"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00142",
"parentTask": "M16-GAP-00141",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.select_more data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.select_more",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00142.py -- tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00142",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00142"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00142.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3124,
"contextRemainingTokens": 780
},
"source": {
"bytes": 6780,
"tokens": 1696
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00142.py",
"bytes": 2258,
"tokens": 565
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00142-operator-action.select_more.blend",
"bytes": 86855,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 224767,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 248154,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00142/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00142.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00142/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2258,
"tokens": 565
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00143",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00142.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00141/manifest.json",
"parentStatus": "docs/status/M16-GAP-00141.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00142.md",
"tests/golden/M16-GAP-00141/manifest.json",
"docs/status/M16-GAP-00141.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00141",
"parentTask": "M16-GAP-00140",
"status": "done",
"nextTask": "M16-GAP-00142",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00141 Status",
"status: done",
"task: action.select_linked operator LOCAL_EXACT slice",
"updated: 2026-08-20 America/New_York",
"scope:",
"- Action Editor linked selection on `object:WebGapSelectLinkedObject`, starting from `location[0]` frame 3.",
"evidence:",
"- Blender desktop and WASM/Main expose matching three location channels with frames 1, 3 and 5 selected after `select_linked`."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1779,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 445
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00142.md",
"bytes": 1779,
"lines": 38,
"tokens": 445
},
{
"path": "tests/golden/M16-GAP-00141/manifest.json",
"bytes": 2222,
"lines": 26,
"tokens": 556
},
{
"path": "docs/status/M16-GAP-00141.md",
"bytes": 611,
"lines": 18,
"tokens": 153
}
],
"sourceTokens": 1696,
"evidenceFiles": 1,
"evidenceBytes": 2258,
"evidenceTokens": 565,
"totalTokens": 2261,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3285,
"serializedContextTokens": 753,
"withinBudget": true
}
}

View File

@@ -0,0 +1,58 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
4.0,
5.0
],
"index": 0,
"path": "location",
"selected": [
false,
true,
false
]
},
{
"frames": [
1.0,
4.0,
5.0
],
"index": 1,
"path": "location",
"selected": [
false,
true,
false
]
},
{
"frames": [
1.0,
4.0,
5.0
],
"index": 2,
"path": "location",
"selected": [
false,
true,
false
]
}
],
"name": "WebGapSnapObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"currentFrame": 4,
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend",
"fixtureSha256": "d12a490f3d76a0b599f4fdffbb2dd65e01d0c637a2de6bbe78a44b887676995a",
"operation": "ACTION_SNAP_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00143",
"type": "CFRA"
}

View File

@@ -0,0 +1,53 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00143",
"operation": "ACTION_SNAP_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend",
"sha256": "d12a490f3d76a0b599f4fdffbb2dd65e01d0c637a2de6bbe78a44b887676995a"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00143/action-snap-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapSnapObjectAction:object:WebGapSnapObject",
"type": "CFRA",
"currentFrame": 4,
"framesPerChannel": [
[
1,
4,
5
],
[
1,
4,
5
],
[
1,
4,
5
]
],
"selectedPerChannel": [
[
4
],
[
4
],
[
4
]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00144"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00143",
"parentTask": "M16-GAP-00142",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_SNAP_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00142/manifest.json", "sha256": "faece45f1ca92a39c7d1314b1eb325641c4eb4db91b321ca53578e6db6c734a0"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend", "sha256": "d12a490f3d76a0b599f4fdffbb2dd65e01d0c637a2de6bbe78a44b887676995a"},
"generator": {"path": "tools/web/generated/M16-GAP-00143.py", "sha256": "fe0b8f6c70b0a2fece59b696e5e83e55cb2f72705bb89db43b8ed4e953a198be"},
"desktopChecker": {"path": "tools/web/check-action-snap-desktop.py", "sha256": "01064fe4acd586e99986372a8b39a72340d1a961506c7c189b074ce7928cd568"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b5cc720937266a6e7dbfbaa96005079f8ce97dc38aaad79742a3eb99ad17fa83"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00143/action-snap-desktop-report.json", "sha256": "0da5db63e20db1a97fed02019368de5c6a758e6e34c8b43af52800d33dfa48e0"},
"webReport": {"path": "tests/golden/M16-GAP-00143/action-snap-local-exact-report.json", "sha256": "61afb2360dc9814da3b741a133b07728b4a560676e7a436f995d1c07e1a4d17e"},
"taskContext": {"path": "tests/golden/M16-GAP-00143/task-context.json", "sha256": "8fbac173dc0bf7f0775d149161c7ea2ddf2cdd489f0f634669f860983806c1f1"}
},
"nextTask": "M16-GAP-00144"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00143",
"parentTask": "M16-GAP-00142",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.snap data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.snap",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00143.py -- tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00143",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00143"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00143.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3166,
"contextRemainingTokens": 791
},
"source": {
"bytes": 6738,
"tokens": 1685
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00143.py",
"bytes": 2223,
"tokens": 556
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00143-operator-action.snap.blend",
"bytes": 86847,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 224767,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 251833,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00143/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00143.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00143/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2223,
"tokens": 556
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00144",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00143.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00142/manifest.json",
"parentStatus": "docs/status/M16-GAP-00142.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00143.md",
"tests/golden/M16-GAP-00142/manifest.json",
"docs/status/M16-GAP-00142.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00142",
"parentTask": "M16-GAP-00141",
"status": "done",
"nextTask": "M16-GAP-00143",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00142 Status",
"status: done",
"task: action.select_more operator LOCAL_EXACT slice",
"updated: 2026-08-20 America/New_York",
"scope:",
"- Action Editor neighboring-key selection on `object:WebGapSelectMoreObject`, starting from `location[0]` frame 3.",
"evidence:",
"- Blender desktop and WASM/Main expose matching three location channels with frames 1, 3 and 5 selected after `select_more`."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1744,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 436
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00143.md",
"bytes": 1744,
"lines": 38,
"tokens": 436
},
{
"path": "tests/golden/M16-GAP-00142/manifest.json",
"bytes": 2212,
"lines": 26,
"tokens": 553
},
{
"path": "docs/status/M16-GAP-00142.md",
"bytes": 614,
"lines": 18,
"tokens": 154
}
],
"sourceTokens": 1685,
"evidenceFiles": 1,
"evidenceBytes": 2223,
"evidenceTokens": 556,
"totalTokens": 2241,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3265,
"serializedContextTokens": 747,
"withinBudget": true
}
}

View File

@@ -0,0 +1,25 @@
{
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend",
"fixtureSha256": "7d617c7e82a5673eedd2f48178a5991066a276a2c149f7be92c5f5975adc4234",
"nla": {
"activeAction": null,
"tracks": [
{
"name": "[Action Stash]",
"strips": [
{
"action": "WebGapStashObjectAction",
"frameEnd": 5.0,
"frameStart": 1.0,
"name": "WebGapStashObjectAction"
}
]
}
]
},
"operation": "ACTION_STASH_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00144"
}

View File

@@ -0,0 +1,56 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00144",
"operation": "ACTION_STASH_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend",
"sha256": "7d617c7e82a5673eedd2f48178a5991066a276a2c149f7be92c5f5975adc4234"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00144/action-stash-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapStashObjectAction:object:WebGapStashObject",
"nlaTracks": [
{
"id": "nla-track:object:WebGapStashObject:0",
"muted": true,
"name": "[Action Stash]",
"ownerId": "object:WebGapStashObject",
"schemaVersion": 1,
"selected": true,
"solo": false,
"strips": [
{
"actionFrameEnd": 5,
"actionFrameStart": 1,
"actionId": "action:WebGapStashObjectAction:object:WebGapStashObject",
"blendIn": 0,
"blendMode": "REPLACE",
"blendOut": 0,
"extrapolation": "HOLD",
"frameEnd": 5,
"frameStart": 1,
"id": "WebGapStashObjectAction",
"influence": 0,
"muted": false,
"repeat": 1,
"reverse": false,
"scale": 1,
"selected": false,
"stripType": "CLIP",
"useTimeWarp": false
}
]
}
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00145"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00144",
"parentTask": "M16-GAP-00143",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_STASH_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00143/manifest.json", "sha256": "3a9c08d6b0e17899165f7597919854e8c528028ba7879a25e4d33d659475ce34"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend", "sha256": "7d617c7e82a5673eedd2f48178a5991066a276a2c149f7be92c5f5975adc4234"},
"generator": {"path": "tools/web/generated/M16-GAP-00144.py", "sha256": "66275fb985c801c659e063f2379d9154093550cb7d5916013332b88aa25dfbec"},
"desktopChecker": {"path": "tools/web/check-action-stash-desktop.py", "sha256": "dca0ae7cc8914f9598a0638ff19d0c8a490efd794b9a6fde331d8e45306c97df"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "714be20b276ad1d4476e6e18f9533f75cdc730a0aade382ebf58ac5b912c6244"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00144/action-stash-desktop-report.json", "sha256": "c7b38407179b23e212f2fff6d34424b3c9f21e024f8ce936cae8f4a6746c4904"},
"webReport": {"path": "tests/golden/M16-GAP-00144/action-stash-local-exact-report.json", "sha256": "0dd4d10207503d6ea41c2d630b137471587961ceaa26870132936c8c91a72752"},
"taskContext": {"path": "tests/golden/M16-GAP-00144/task-context.json", "sha256": "45bc5f26682956126524444937f5af263c238b91d66f23f295a4bf37e49d42a2"}
},
"nextTask": "M16-GAP-00145"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00144",
"parentTask": "M16-GAP-00143",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.stash data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.stash",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00144.py -- tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00144",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00144"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00144.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3231,
"contextRemainingTokens": 806
},
"source": {
"bytes": 6673,
"tokens": 1670
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00144.py",
"bytes": 1848,
"tokens": 462
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00144-operator-action.stash.blend",
"bytes": 86955,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 224767,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 255063,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00144/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00144.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00144/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1848,
"tokens": 462
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00145",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00144.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00143/manifest.json",
"parentStatus": "docs/status/M16-GAP-00143.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00144.md",
"tests/golden/M16-GAP-00143/manifest.json",
"docs/status/M16-GAP-00143.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00143",
"parentTask": "M16-GAP-00142",
"status": "done",
"nextTask": "M16-GAP-00144",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00143 Status",
"status: done",
"task: action.snap operator LOCAL_EXACT slice",
"updated: 2026-08-20 America/New_York",
"scope:",
"- Action Editor current-frame snapping on `object:WebGapSnapObject`, using `type=CFRA` at frame 4.",
"evidence:",
"- Blender desktop and WASM/Main expose matching location channels with keyframes `[1,4,5]` and frame 4 selected."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1749,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 438
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00144.md",
"bytes": 1749,
"lines": 38,
"tokens": 438
},
{
"path": "tests/golden/M16-GAP-00143/manifest.json",
"bytes": 2177,
"lines": 26,
"tokens": 545
},
{
"path": "docs/status/M16-GAP-00143.md",
"bytes": 579,
"lines": 18,
"tokens": 145
}
],
"sourceTokens": 1670,
"evidenceFiles": 1,
"evidenceBytes": 1848,
"evidenceTokens": 462,
"totalTokens": 2132,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3156,
"serializedContextTokens": 748,
"withinBudget": true
}
}

View File

@@ -0,0 +1,25 @@
{
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend",
"fixtureSha256": "f7b2dc080c9aa23cc45b9a2c59114f23ce3f1369f00618c9ef51569516692f38",
"nla": {
"activeAction": "Action",
"tracks": [
{
"name": "[Action Stash]",
"strips": [
{
"action": "WebGapStashCreateObjectAction",
"frameEnd": 5.0,
"frameStart": 1.0,
"name": "WebGapStashCreateObjectAction"
}
]
}
]
},
"operation": "ACTION_STASH_AND_CREATE_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00145"
}

View File

@@ -0,0 +1,57 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00145",
"operation": "ACTION_STASH_AND_CREATE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend",
"sha256": "f7b2dc080c9aa23cc45b9a2c59114f23ce3f1369f00618c9ef51569516692f38"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"activeActionId": null,
"stashedActionId": "action:WebGapStashCreateObjectAction:object:WebGapStashCreateObject",
"nlaTracks": [
{
"id": "nla-track:object:WebGapStashCreateObject:0",
"muted": true,
"name": "[Action Stash]",
"ownerId": "object:WebGapStashCreateObject",
"schemaVersion": 1,
"selected": true,
"solo": false,
"strips": [
{
"actionFrameEnd": 5,
"actionFrameStart": 1,
"actionId": "action:WebGapStashCreateObjectAction:object:WebGapStashCreateObject",
"blendIn": 0,
"blendMode": "REPLACE",
"blendOut": 0,
"extrapolation": "HOLD",
"frameEnd": 5,
"frameStart": 1,
"id": "WebGapStashCreateObjectAction",
"influence": 0,
"muted": false,
"repeat": 1,
"reverse": false,
"scale": 1,
"selected": false,
"stripType": "CLIP",
"useTimeWarp": false
}
]
}
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00146"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00145",
"parentTask": "M16-GAP-00144",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_STASH_AND_CREATE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00144/manifest.json", "sha256": "4727b5807db7269de9353110d51bc5d6e594202cc5cb72a91697cee3589e539b"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend", "sha256": "f7b2dc080c9aa23cc45b9a2c59114f23ce3f1369f00618c9ef51569516692f38"},
"generator": {"path": "tools/web/generated/M16-GAP-00145.py", "sha256": "cbbc5b2e3e84ec8442c4acb065be91a6818ff7c1d2d92e7a0e13253696b8389d"},
"desktopChecker": {"path": "tools/web/check-action-stash-and-create-desktop.py", "sha256": "5bb7d73a5be061df3d95ce46357a5b0f48e863be217a4677f25f33d31d960cd5"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "e9ef46b4772f94a6b4bba3d3c3c7142e162355846cd75239f9324a4cebbb5c3d"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "bd0c21440ef1af91dbb861687f8b8637a58656a4965e59cc67fc16b495cf437e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "82d423ed9aff4df29ea7d2a18788365f9369ce6bfd9365dbd31044ba88555359"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00145/action-stash-and-create-desktop-report.json", "sha256": "05f9f233a10822b8de85e9b2070863d6f584e60123b4fc91e4d147a93e120df7"},
"webReport": {"path": "tests/golden/M16-GAP-00145/action-stash-and-create-local-exact-report.json", "sha256": "2820c70ab69ad674d6bee5424fceb98062fc33b0e309de98d0fe092515f0f4ea"},
"taskContext": {"path": "tests/golden/M16-GAP-00145/task-context.json", "sha256": "d785cecfb165f45ec6fcefe072c7cbed452e0ccb0ef6fba5fbf22b1b85224596"}
},
"nextTask": "M16-GAP-00146"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00145",
"parentTask": "M16-GAP-00144",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.stash_and_create data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.stash_and_create",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00145.py -- tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00145",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00145"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00145.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3199,
"contextRemainingTokens": 799
},
"source": {
"bytes": 6705,
"tokens": 1677
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00145.py",
"bytes": 1926,
"tokens": 482
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00145-operator-action.stash_and_create.blend",
"bytes": 87002,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 224767,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 258363,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00145/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00145.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00145/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1926,
"tokens": 482
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00146",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00145.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00144/manifest.json",
"parentStatus": "docs/status/M16-GAP-00144.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00145.md",
"tests/golden/M16-GAP-00144/manifest.json",
"docs/status/M16-GAP-00144.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00144",
"parentTask": "M16-GAP-00143",
"status": "done",
"nextTask": "M16-GAP-00145",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00144 Status",
"status: done",
"task: action.stash operator LOCAL_EXACT slice",
"updated: 2026-08-20 America/New_York",
"scope:",
"- Action Editor Action stashing on `object:WebGapStashObject`.",
"evidence:",
"- Blender desktop and WASM/Main expose no active Action plus one NLA track containing one strip for the stashed Action."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1804,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 451
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00145.md",
"bytes": 1804,
"lines": 38,
"tokens": 451
},
{
"path": "tests/golden/M16-GAP-00144/manifest.json",
"bytes": 2182,
"lines": 26,
"tokens": 546
},
{
"path": "docs/status/M16-GAP-00144.md",
"bytes": 551,
"lines": 18,
"tokens": 138
}
],
"sourceTokens": 1677,
"evidenceFiles": 1,
"evidenceBytes": 1926,
"evidenceTokens": 482,
"totalTokens": 2159,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3183,
"serializedContextTokens": 756,
"withinBudget": true
}
}

View File

@@ -0,0 +1,46 @@
{
"action": {
"activeAction": null,
"unlinkedAction": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location"
}
],
"name": "WebGapActionUnlinkObjectAction",
"useFakeUser": true,
"users": 1
}
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend",
"fixtureSha256": "80d5a85825c441b1835e82af730df148dd664fbae988aabb9aab6e74ac605f11",
"operation": "ACTION_UNLINK_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00146"
}

View File

@@ -0,0 +1,30 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00146",
"operation": "ACTION_UNLINK_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend",
"sha256": "80d5a85825c441b1835e82af730df148dd664fbae988aabb9aab6e74ac605f11"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00146/action-unlink-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapActionUnlinkObjectAction:unlinked",
"targetId": "unlinked",
"unlinked": true,
"keyframesPerChannel": [
3,
3,
3
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00147"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00146",
"parentTask": "M16-GAP-00145",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_UNLINK_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00145/manifest.json", "sha256": "4fc29aed9ce6ef07732304b80483e2c4c7c0036e692b4705b6f0cb952fe04829"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend", "sha256": "80d5a85825c441b1835e82af730df148dd664fbae988aabb9aab6e74ac605f11"},
"generator": {"path": "tools/web/generated/M16-GAP-00146.py", "sha256": "ab4682dbd1e828f8f18d2bb0cc17ff6a795d364fefe5f0dadb88b74f55220638"},
"desktopChecker": {"path": "tools/web/check-action-unlink-desktop.py", "sha256": "e0f244be5712faa8caaa094efdfefc69c5ffaa9cb4e7e1185414f3da35e239ae"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4eb56bd2bd37d9c0fe5d9a82aa74a521cb8f958d04d108dcf81d1ab3947b306c"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "7682a90dc52034a663309705922bdefbc617644b9756f3e66228b442b7c75aa8"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "37784bb62b9da62f7db7a66d1dc009aa82a9123a2d07f0c26f524989395c907f"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "37784bb62b9da62f7db7a66d1dc009aa82a9123a2d07f0c26f524989395c907f"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00146/action-unlink-desktop-report.json", "sha256": "a328397950846c7ee22fc7d0ab5788eb5174a8296f79c70763f007274977f5b6"},
"webReport": {"path": "tests/golden/M16-GAP-00146/action-unlink-local-exact-report.json", "sha256": "2190f23628b0b4ecb68a8c5aafb096e412c7fe5f654bad094686b0700c8e388c"},
"taskContext": {"path": "tests/golden/M16-GAP-00146/task-context.json", "sha256": "5fe6424cd98d78ea065bb1fb0cd34bae92552171592698a48182d08b943a4c08"}
},
"nextTask": "M16-GAP-00147"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00146",
"parentTask": "M16-GAP-00145",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.unlink data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.unlink",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00146.py -- tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00146",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00146"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00146.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3177,
"contextRemainingTokens": 793
},
"source": {
"bytes": 6727,
"tokens": 1683
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00146.py",
"bytes": 2007,
"tokens": 502
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00146-operator-action.unlink.blend",
"bytes": 86881,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 225529,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 261657,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00146/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00146.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00146/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2007,
"tokens": 502
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00147",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00146.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00145/manifest.json",
"parentStatus": "docs/status/M16-GAP-00145.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00146.md",
"tests/golden/M16-GAP-00145/manifest.json",
"docs/status/M16-GAP-00145.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00145",
"parentTask": "M16-GAP-00144",
"status": "done",
"nextTask": "M16-GAP-00146",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00145 Status",
"status: done",
"task: action.stash_and_create operator LOCAL_EXACT slice",
"updated: 2026-08-20 America/New_York",
"scope:",
"- Action Editor stash-and-create on `object:WebGapStashCreateObject`.",
"evidence:",
"- Blender desktop and WASM/Main expose one NLA track/strip containing the stashed Action while active Action is empty."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1754,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 439
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00146.md",
"bytes": 1754,
"lines": 38,
"tokens": 439
},
{
"path": "tests/golden/M16-GAP-00145/manifest.json",
"bytes": 2237,
"lines": 26,
"tokens": 560
},
{
"path": "docs/status/M16-GAP-00145.md",
"bytes": 568,
"lines": 18,
"tokens": 142
}
],
"sourceTokens": 1683,
"evidenceFiles": 1,
"evidenceBytes": 2007,
"evidenceTokens": 502,
"totalTokens": 2185,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3209,
"serializedContextTokens": 749,
"withinBudget": true
}
}

View File

@@ -0,0 +1,27 @@
{
"action": {
"areaType": "DOPESHEET_EDITOR",
"uiMode": "ACTION",
"view2d": {
"cur": {
"xmax": 5.0,
"xmin": 1.0,
"ymax": 0.0,
"ymin": -380.0
},
"mask": {
"xmax": 1153,
"xmin": 0,
"ymax": 380,
"ymin": 0
}
}
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend",
"fixtureSha256": "ef2a4fd9a28a6a97d40b258beb11f8e00899c4715e0ba6e0703a25aecd678ec5",
"operation": "ACTION_VIEW_ALL_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00147"
}

View File

@@ -0,0 +1,38 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00147",
"operation": "ACTION_VIEW_ALL_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend",
"sha256": "ef2a4fd9a28a6a97d40b258beb11f8e00899c4715e0ba6e0703a25aecd678ec5"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00147/action-view-all-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"editor": "DOPE_SHEET",
"regionKind": "MAIN",
"view2d": {
"cur": {
"xmax": 5,
"xmin": 1,
"ymax": 0,
"ymin": -380
},
"mask": {
"xmax": 1153,
"xmin": 0,
"ymax": 380,
"ymin": 0
}
}
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00148"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00147",
"parentTask": "M16-GAP-00146",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_VIEW_ALL_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00146/manifest.json", "sha256": "cfe6d9e8aeeeddbd080f6ee3dad941424c8434e7c6a09af2c84b634e9440a849"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend", "sha256": "ef2a4fd9a28a6a97d40b258beb11f8e00899c4715e0ba6e0703a25aecd678ec5"},
"generator": {"path": "tools/web/generated/M16-GAP-00147.py", "sha256": "738d70668b71d9be03b8aab088c9a71e82f102f97cc0435c58a19c6838566ca0"},
"desktopChecker": {"path": "tools/web/check-action-view-all-desktop.py", "sha256": "67a1a212702db13b924daa567cabad7c117ea9627d43b07a7bd70243379b76eb"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "2d7cc16b93d3ac3ce786e4640ad66ca5ccbb22eb0b5bdd92dee60eb9b350f60f"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00147/action-view-all-desktop-report.json", "sha256": "d1eb6d018b05f2f00d16498dea4d34d49f07ed4489f2ee0dabcf9409dd76deaf"},
"webReport": {"path": "tests/golden/M16-GAP-00147/action-view-all-local-exact-report.json", "sha256": "f23dd5aae9e4f649c6f29ae6cc971d7e358386bc4cbdd3466e7a075f065f362c"},
"taskContext": {"path": "tests/golden/M16-GAP-00147/task-context.json", "sha256": "f03fa466b214f882119db539bbd7e6f79da5b16624e61f067d217dfc2480ac33"}
},
"nextTask": "M16-GAP-00148"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00147",
"parentTask": "M16-GAP-00146",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.view_all data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.view_all",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00147.py -- tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00147",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00147"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00147.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3111,
"contextRemainingTokens": 777
},
"source": {
"bytes": 6793,
"tokens": 1699
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00147.py",
"bytes": 2197,
"tokens": 550
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00147-operator-action.view_all.blend",
"bytes": 86846,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 265282,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00147/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00147.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00147/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2197,
"tokens": 550
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00148",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00147.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00146/manifest.json",
"parentStatus": "docs/status/M16-GAP-00146.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00147.md",
"tests/golden/M16-GAP-00146/manifest.json",
"docs/status/M16-GAP-00146.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00146",
"parentTask": "M16-GAP-00145",
"status": "done",
"nextTask": "M16-GAP-00147",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00146 Status",
"status: done",
"task: action.unlink operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor unlink on `WebGapActionUnlinkObject`.",
"evidence:",
"- Blender desktop reports no active Action while retaining the fake-user `WebGapActionUnlinkObjectAction` with three location channels."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1764,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 441
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00147.md",
"bytes": 1764,
"lines": 38,
"tokens": 441
},
{
"path": "tests/golden/M16-GAP-00146/manifest.json",
"bytes": 2187,
"lines": 26,
"tokens": 547
},
{
"path": "docs/status/M16-GAP-00146.md",
"bytes": 674,
"lines": 19,
"tokens": 169
}
],
"sourceTokens": 1699,
"evidenceFiles": 1,
"evidenceBytes": 2197,
"evidenceTokens": 550,
"totalTokens": 2249,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3273,
"serializedContextTokens": 750,
"withinBudget": true
}
}

View File

@@ -0,0 +1,28 @@
{
"action": {
"areaType": "DOPESHEET_EDITOR",
"currentFrame": 3,
"uiMode": "ACTION",
"view2d": {
"cur": {
"xmax": 15.0,
"xmin": -9.0,
"ymax": 0.0,
"ymin": -956.0
},
"mask": {
"xmax": 1577,
"xmin": 0,
"ymax": 955,
"ymin": 0
}
}
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend",
"fixtureSha256": "142f7036c4c1a196ae0affc43fd62d6a196576898ee969f9aa83655917e0960c",
"operation": "ACTION_VIEW_FRAME_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00148"
}

View File

@@ -0,0 +1,39 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00148",
"operation": "ACTION_VIEW_FRAME_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend",
"sha256": "142f7036c4c1a196ae0affc43fd62d6a196576898ee969f9aa83655917e0960c"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"editor": "DOPE_SHEET",
"regionKind": "MAIN",
"currentFrame": 3,
"view2d": {
"cur": {
"xmax": 15,
"xmin": -9,
"ymax": 0,
"ymin": -956
},
"mask": {
"xmax": 1577,
"xmin": 0,
"ymax": 955,
"ymin": 0
}
}
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00149"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00148",
"parentTask": "M16-GAP-00147",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_VIEW_FRAME_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00147/manifest.json", "sha256": "451f1612a0addd34c1d8c3b074e0f72640f6e63105f158d89288db12ae714127"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend", "sha256": "142f7036c4c1a196ae0affc43fd62d6a196576898ee969f9aa83655917e0960c"},
"generator": {"path": "tools/web/generated/M16-GAP-00148.py", "sha256": "7c21cdadfb8d08c2f44ba2e58d53f9c879773b488a53135bc3a9ad4ae96aa3d5"},
"desktopChecker": {"path": "tools/web/check-action-view-frame-desktop.py", "sha256": "11a2b6c2d6d1bb5670a161a0db02a7f0b65392cc820d263bd21df15196d9a4cd"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "62bfd759d28ff59ec2ba4218ab11dcc910f1bdb13dfb400ff80a07639ec7c03e"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00148/action-view-frame-desktop-report.json", "sha256": "1895f562b9d1a67164256dd47b40a9a0280f5c45f0f153184cde5d54afca2d63"},
"webReport": {"path": "tests/golden/M16-GAP-00148/action-view-frame-local-exact-report.json", "sha256": "a5b4db975c15055bf295f72f5a52aeb66bfa5d81959dba303e89472ce92ff83a"},
"taskContext": {"path": "tests/golden/M16-GAP-00148/task-context.json", "sha256": "52781cdba0dae2569088c7d80e4c5028cf1fefb5beb187dbd8f767d4b5122b32"}
},
"nextTask": "M16-GAP-00149"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00148",
"parentTask": "M16-GAP-00147",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.view_frame data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.view_frame",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00148.py -- tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00148",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00148"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00148.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3201,
"contextRemainingTokens": 799
},
"source": {
"bytes": 6703,
"tokens": 1677
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00148.py",
"bytes": 2184,
"tokens": 546
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00148-operator-action.view_frame.blend",
"bytes": 87098,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 268979,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00148/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00148.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00148/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2184,
"tokens": 546
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00149",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00148.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00147/manifest.json",
"parentStatus": "docs/status/M16-GAP-00147.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00148.md",
"tests/golden/M16-GAP-00147/manifest.json",
"docs/status/M16-GAP-00147.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00147",
"parentTask": "M16-GAP-00146",
"status": "done",
"nextTask": "M16-GAP-00148",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00147 Status",
"status: done",
"task: action.view_all operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `action.view_all` view state on the Animation workspace main region.",
"evidence:",
"- Blender desktop and WASM/Main expose the same Action Editor `view2d.cur` and mask after `action.view_all`."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1774,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 444
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00148.md",
"bytes": 1774,
"lines": 38,
"tokens": 444
},
{
"path": "tests/golden/M16-GAP-00147/manifest.json",
"bytes": 2197,
"lines": 26,
"tokens": 550
},
{
"path": "docs/status/M16-GAP-00147.md",
"bytes": 564,
"lines": 18,
"tokens": 141
}
],
"sourceTokens": 1677,
"evidenceFiles": 1,
"evidenceBytes": 2184,
"evidenceTokens": 546,
"totalTokens": 2223,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3247,
"serializedContextTokens": 752,
"withinBudget": true
}
}

View File

@@ -0,0 +1,71 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location",
"selected": [
false,
true,
false
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location",
"selected": [
false,
true,
false
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location",
"selected": [
false,
true,
false
]
}
],
"name": "WebGapActionViewSelectedObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend",
"fixtureSha256": "108a69ae276722c4d9396deb51f7f1909799d48ce310d82675305a59b1196fc7",
"operation": "ACTION_VIEW_SELECTED_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"selectedFrame": 3,
"task": "M16-GAP-00149",
"view2d": {
"cur": {
"xmax": 5.0,
"xmin": 1.0,
"ymax": 0.0,
"ymin": -956.0
},
"mask": {
"xmax": 1577,
"xmin": 0,
"ymax": 955,
"ymin": 0
}
}
}

View File

@@ -0,0 +1,49 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00149",
"operation": "ACTION_VIEW_SELECTED_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend",
"sha256": "108a69ae276722c4d9396deb51f7f1909799d48ce310d82675305a59b1196fc7"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapActionViewSelectedObjectAction:object:WebGapActionViewSelectedObject",
"selectedFrame": 3,
"selectedPerChannel": [
[
3
],
[
3
],
[
3
]
],
"view2d": {
"cur": {
"xmax": 5,
"xmin": 1,
"ymax": 0,
"ymin": -956
},
"mask": {
"xmax": 1577,
"xmin": 0,
"ymax": 955,
"ymin": 0
}
}
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00150"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00149",
"parentTask": "M16-GAP-00148",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ACTION_VIEW_SELECTED_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00148/manifest.json", "sha256": "fd9d80e817a424f0d37e88f182597a8b94a3b858c934def0ffa116047cc907df"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend", "sha256": "108a69ae276722c4d9396deb51f7f1909799d48ce310d82675305a59b1196fc7"},
"generator": {"path": "tools/web/generated/M16-GAP-00149.py", "sha256": "9d7d4a10fb148fe40a1f624886491d64c9dde1bf86cdf21a97c86ec167f7cb92"},
"desktopChecker": {"path": "tools/web/check-action-view-selected-desktop.py", "sha256": "fa74311b3ca77b04212ed894c0511fcab7489cff781fc934177ce4e40a139647"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "a614499ad09c9dc94a751141733e91613a5dc070edae2ad76f2c9fb37220f0db"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00149/action-view-selected-desktop-report.json", "sha256": "002328f69d528d49570dda4976ea7ae0bb9229fa84f8a3bb1b5b6e3cc061a188"},
"webReport": {"path": "tests/golden/M16-GAP-00149/action-view-selected-local-exact-report.json", "sha256": "6d2e450cece242a95b9b861292d74654ec7a8e3f191364a64c2c9b809a7e0bb4"},
"taskContext": {"path": "tests/golden/M16-GAP-00149/task-context.json", "sha256": "da34e2c587ec836b745ae0d69dc27b75c77ce17a73d18c223ac817e9365e29c7"}
},
"nextTask": "M16-GAP-00150"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00149",
"parentTask": "M16-GAP-00148",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:action.view_selected data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:action.view_selected",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00149.py -- tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00149",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00149"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00149.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3172,
"contextRemainingTokens": 792
},
"source": {
"bytes": 6732,
"tokens": 1684
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00149.py",
"bytes": 2517,
"tokens": 630
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00149-operator-action.view_selected.blend",
"bytes": 87111,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 273145,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00149/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00149.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00149/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2517,
"tokens": 630
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00150",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00149.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00148/manifest.json",
"parentStatus": "docs/status/M16-GAP-00148.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00149.md",
"tests/golden/M16-GAP-00148/manifest.json",
"docs/status/M16-GAP-00148.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00148",
"parentTask": "M16-GAP-00147",
"status": "done",
"nextTask": "M16-GAP-00149",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00148 Status",
"status: done",
"task: action.view_frame operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `action.view_frame` centering around current frame 3.",
"evidence:",
"- Blender desktop and WASM/Main expose the same Action Editor `view2d.cur` and mask around current frame 3."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1789,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 448
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00149.md",
"bytes": 1789,
"lines": 38,
"tokens": 448
},
{
"path": "tests/golden/M16-GAP-00148/manifest.json",
"bytes": 2207,
"lines": 26,
"tokens": 552
},
{
"path": "docs/status/M16-GAP-00148.md",
"bytes": 568,
"lines": 18,
"tokens": 142
}
],
"sourceTokens": 1684,
"evidenceFiles": 1,
"evidenceBytes": 2517,
"evidenceTokens": 630,
"totalTokens": 2314,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3338,
"serializedContextTokens": 754,
"withinBudget": true
}
}

View File

@@ -0,0 +1,58 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location",
"selected": [
true,
true,
true
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location",
"selected": [
true,
true,
true
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location",
"selected": [
true,
true,
true
]
}
],
"name": "WebGapAnimChangeFrameObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"changedToFrame": 4,
"currentFrame": 4,
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend",
"fixtureSha256": "04ba48b6b81449b47cd8c038a012518f773dbfbe542ec29861686cf9a1a0cedb",
"operation": "ANIM_CHANGE_FRAME_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00150"
}

View File

@@ -0,0 +1,41 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00150",
"operation": "ANIM_CHANGE_FRAME_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend",
"sha256": "04ba48b6b81449b47cd8c038a012518f773dbfbe542ec29861686cf9a1a0cedb"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChangeFrameObjectAction:object:WebGapAnimChangeFrameObject",
"changedToFrame": 4,
"framesPerChannel": [
[
1,
3,
5
],
[
1,
3,
5
],
[
1,
3,
5
]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00151"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00150",
"parentTask": "M16-GAP-00149",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANGE_FRAME_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00149/manifest.json", "sha256": "b39fe0194d94b7cb54e8ca62b51d0d58fc7f82c1ab06122ab8ab74ca79ce6f8d"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend", "sha256": "04ba48b6b81449b47cd8c038a012518f773dbfbe542ec29861686cf9a1a0cedb"},
"generator": {"path": "tools/web/generated/M16-GAP-00150.py", "sha256": "582a5e470a2b47095762ddd6df93ff8ffe8a67ea45aa2b483f87528a9ca7180c"},
"desktopChecker": {"path": "tools/web/check-action-change-frame-desktop.py", "sha256": "18fcc3ea0f0cf7a503651791d283852b4ae0b219339258880351837a59726327"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b738ecac1c2402e1b60c681d395e7ad6a9769c1151c91a8d720daaf63891099b"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00150/anim-change-frame-desktop-report.json", "sha256": "b0367cd339a51049f1eb511875c0beee269439694f99c2ee69513d71a5cd5453"},
"webReport": {"path": "tests/golden/M16-GAP-00150/anim-change-frame-local-exact-report.json", "sha256": "358a97f75cf727ba385434f4e42c9e2857d046131fa15d1460f60eba68c72288"},
"taskContext": {"path": "tests/golden/M16-GAP-00150/task-context.json", "sha256": "f3e8a8d194110019633496b55623589f1d13c8c3f062ec1c03aac023276a50c3"}
},
"nextTask": "M16-GAP-00151"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00150",
"parentTask": "M16-GAP-00149",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.change_frame data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.change_frame",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00150.py -- tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00150",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00150"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00150.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3140,
"contextRemainingTokens": 784
},
"source": {
"bytes": 6764,
"tokens": 1692
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00150.py",
"bytes": 2130,
"tokens": 533
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00150-operator-anim.change_frame.blend",
"bytes": 87111,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 276688,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00150/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00150.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00150/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2130,
"tokens": 533
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00151",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00150.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00149/manifest.json",
"parentStatus": "docs/status/M16-GAP-00149.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00150.md",
"tests/golden/M16-GAP-00149/manifest.json",
"docs/status/M16-GAP-00149.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00149",
"parentTask": "M16-GAP-00148",
"status": "done",
"nextTask": "M16-GAP-00150",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00149 Status",
"status: done",
"task: action.view_selected operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `action.view_selected` selection and view state around selected frame 3.",
"evidence:",
"- Blender desktop and WASM/Main expose the same Action Editor selection on frame 3 for all three location channels and the same `view2d.cur` and mask."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1774,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 444
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00150.md",
"bytes": 1774,
"lines": 38,
"tokens": 444
},
{
"path": "tests/golden/M16-GAP-00149/manifest.json",
"bytes": 2222,
"lines": 26,
"tokens": 556
},
{
"path": "docs/status/M16-GAP-00149.md",
"bytes": 600,
"lines": 18,
"tokens": 150
}
],
"sourceTokens": 1692,
"evidenceFiles": 1,
"evidenceBytes": 2130,
"evidenceTokens": 533,
"totalTokens": 2225,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3249,
"serializedContextTokens": 752,
"withinBudget": true
}
}

View File

@@ -0,0 +1,60 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location",
"selected": [
true,
true,
true
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location",
"selected": [
false,
false,
false
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location",
"selected": [
false,
false,
false
]
}
],
"name": "WebGapAnimChannelSelectKeysObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend",
"fixtureSha256": "f8ed4706c765c28e850c752bf4fc367b815c298b574cbed741997a5770826b43",
"operation": "ANIM_CHANNEL_SELECT_KEYS_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"selectedChannel": {
"index": 0,
"path": "location"
},
"task": "M16-GAP-00151"
}

View File

@@ -0,0 +1,36 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00151",
"operation": "ANIM_CHANNEL_SELECT_KEYS_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend",
"sha256": "f8ed4706c765c28e850c752bf4fc367b815c298b574cbed741997a5770826b43"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelSelectKeysObjectAction:object:WebGapAnimChannelSelectKeysObject",
"selectedChannel": {
"path": "location",
"index": 0
},
"selectedPerChannel": [
[
1,
3,
5
],
[],
[]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00152"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00151",
"parentTask": "M16-GAP-00150",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNEL_SELECT_KEYS_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00150/manifest.json", "sha256": "a60ed9301159ae403d345cf7d97e30fc3a0edca948022d3961f0a40c1fb015ef"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend", "sha256": "f8ed4706c765c28e850c752bf4fc367b815c298b574cbed741997a5770826b43"},
"generator": {"path": "tools/web/generated/M16-GAP-00151.py", "sha256": "6ac3acd4031a4dc3967d1f49546148fb45854ca1caa3c0569b7246d996cf06a1"},
"desktopChecker": {"path": "tools/web/check-action-channel-select-keys-desktop.py", "sha256": "5d09b95946aa6f7a754cfcd60259e14d388ecc98f4aca0fcb651bc99fabf292f"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "24a2928dca8a3397d40caa22d74bac94dc63e365aa140babc1b183f658a7603c"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00151/anim-channel-select-keys-desktop-report.json", "sha256": "f71376397c83a380252e3e69a4f295153f2e46a7be0bf1de4871605bf0bec16f"},
"webReport": {"path": "tests/golden/M16-GAP-00151/anim-channel-select-keys-local-exact-report.json", "sha256": "225fa87a2cfe47daee71149a1a2122ff9d9f80a602b48ff64bd11b0edf4dcc51"},
"taskContext": {"path": "tests/golden/M16-GAP-00151/task-context.json", "sha256": "73e8f89962ce32d7446fe7a61cdaab43105628ca0661b840e93db8236b8691b6"}
},
"nextTask": "M16-GAP-00152"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00151",
"parentTask": "M16-GAP-00150",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channel_select_keys data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channel_select_keys",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00151.py -- tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00151",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00151"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00151.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3147,
"contextRemainingTokens": 785
},
"source": {
"bytes": 6757,
"tokens": 1691
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00151.py",
"bytes": 2883,
"tokens": 721
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00151-operator-anim.channel_select_keys.blend",
"bytes": 87099,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 280147,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00151/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00151.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00151/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2883,
"tokens": 721
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00152",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00151.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00150/manifest.json",
"parentStatus": "docs/status/M16-GAP-00150.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00151.md",
"tests/golden/M16-GAP-00150/manifest.json",
"docs/status/M16-GAP-00150.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00150",
"parentTask": "M16-GAP-00149",
"status": "done",
"nextTask": "M16-GAP-00151",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00150 Status",
"status: done",
"task: anim.change_frame operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Animation Editor `anim.change_frame` moves the current frame to 4 for a minimal animated object.",
"evidence:",
"- Blender desktop and WASM/Main expose the same current frame 4 and three Action channels with frames 1, 3, and 5."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1809,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 453
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00151.md",
"bytes": 1809,
"lines": 38,
"tokens": 453
},
{
"path": "tests/golden/M16-GAP-00150/manifest.json",
"bytes": 2209,
"lines": 26,
"tokens": 553
},
{
"path": "docs/status/M16-GAP-00150.md",
"bytes": 571,
"lines": 18,
"tokens": 143
}
],
"sourceTokens": 1691,
"evidenceFiles": 1,
"evidenceBytes": 2883,
"evidenceTokens": 721,
"totalTokens": 2412,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3436,
"serializedContextTokens": 757,
"withinBudget": true
}
}

View File

@@ -0,0 +1,55 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location"
}
],
"name": "WebGapAnimChannelViewPickObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend",
"fixtureSha256": "e3a0c3158f43b96f05006d54b451614754d0fca9a07fbcc3b1c9cc3a4e076d29",
"operation": "ANIM_CHANNEL_VIEW_PICK_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00152",
"view2d": {
"cur": {
"xmax": 5.0,
"xmin": 1.0,
"ymax": 0.0,
"ymin": -955.0
},
"mask": {
"xmax": 1577,
"xmin": 0,
"ymax": 955,
"ymin": 0
}
}
}

View File

@@ -0,0 +1,39 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00152",
"operation": "ANIM_CHANNEL_VIEW_PICK_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend",
"sha256": "e3a0c3158f43b96f05006d54b451614754d0fca9a07fbcc3b1c9cc3a4e076d29"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelViewPickObjectAction:object:WebGapAnimChannelViewPickObject",
"editor": "DOPE_SHEET",
"regionKind": "MAIN",
"view2d": {
"cur": {
"xmax": 5,
"xmin": 1,
"ymax": 0,
"ymin": -955
},
"mask": {
"xmax": 1577,
"xmin": 0,
"ymax": 955,
"ymin": 0
}
}
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00153"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00152",
"parentTask": "M16-GAP-00151",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNEL_VIEW_PICK_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00151/manifest.json", "sha256": "6607d5f2f8af37d9f9228ea416889bec0d3d8d6c04cc3bb46999858dac018f2e"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend", "sha256": "e3a0c3158f43b96f05006d54b451614754d0fca9a07fbcc3b1c9cc3a4e076d29"},
"generator": {"path": "tools/web/generated/M16-GAP-00152.py", "sha256": "dc920602484d5b9d90b714de6044c5687f9001fd601170de87019ed194941284"},
"desktopChecker": {"path": "tools/web/check-action-channel-view-pick-desktop.py", "sha256": "2b2c904295211cdcf7689cdda060eed9856338c4295a84e0d74da862bee719a9"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "beeca4b0a0cac130fb2a054be95dad2d6bbf5d7fdcc228e7ba98f080c9c44686"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00152/anim-channel-view-pick-desktop-report.json", "sha256": "e8ddb6bb82386a4c93fb2525ac8c76b965034f827d28c0caa7c2df349833dc7c"},
"webReport": {"path": "tests/golden/M16-GAP-00152/anim-channel-view-pick-local-exact-report.json", "sha256": "813990cb73567d995b784e23f47b7493f6bd3da83278ba86e4161044bfb98b8b"},
"taskContext": {"path": "tests/golden/M16-GAP-00152/task-context.json", "sha256": "c2f0b3acf3ac531ec577583e204e75d15a41f12f3c00b5d7326fe85da4e68547"}
},
"nextTask": "M16-GAP-00153"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00152",
"parentTask": "M16-GAP-00151",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channel_view_pick data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channel_view_pick",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00152.py -- tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00152",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00152"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00152.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3101,
"contextRemainingTokens": 775
},
"source": {
"bytes": 6803,
"tokens": 1701
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00152.py",
"bytes": 2474,
"tokens": 619
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00152-operator-anim.channel_view_pick.blend",
"bytes": 87117,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 283973,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00152/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00152.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00152/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2474,
"tokens": 619
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00153",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00152.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00151/manifest.json",
"parentStatus": "docs/status/M16-GAP-00151.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00152.md",
"tests/golden/M16-GAP-00151/manifest.json",
"docs/status/M16-GAP-00151.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00151",
"parentTask": "M16-GAP-00150",
"status": "done",
"nextTask": "M16-GAP-00152",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00151 Status",
"status: done",
"task: anim.channel_select_keys operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channel_select_keys` selects all keys on the first location channel.",
"evidence:",
"- Blender desktop and WASM/Main expose the same selection: location index 0 at frames 1, 3, and 5; the other channels remain unselected."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1799,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 450
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00152.md",
"bytes": 1799,
"lines": 38,
"tokens": 450
},
{
"path": "tests/golden/M16-GAP-00151/manifest.json",
"bytes": 2244,
"lines": 26,
"tokens": 561
},
{
"path": "docs/status/M16-GAP-00151.md",
"bytes": 592,
"lines": 18,
"tokens": 148
}
],
"sourceTokens": 1701,
"evidenceFiles": 1,
"evidenceBytes": 2474,
"evidenceTokens": 619,
"totalTokens": 2320,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3344,
"serializedContextTokens": 756,
"withinBudget": true
}
}

View File

@@ -0,0 +1,52 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
2.0,
3.0,
4.0,
5.0
],
"index": 0,
"path": "location"
},
{
"frames": [
1.0,
2.0,
3.0,
4.0,
5.0
],
"index": 1,
"path": "location"
},
{
"frames": [
1.0,
2.0,
3.0,
4.0,
5.0
],
"index": 2,
"path": "location"
}
],
"name": "WebGapAnimChannelsBakeObjectAction"
},
"bakeRange": [
1,
5
],
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend",
"fixtureSha256": "1818a2a90d3eea5b38ad4d6e3cb1bd0394022ca62a8384734cefc36305d884eb",
"operation": "ANIM_CHANNELS_BAKE_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"step": 1.0,
"task": "M16-GAP-00153"
}

View File

@@ -0,0 +1,51 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00153",
"operation": "ANIM_CHANNELS_BAKE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend",
"sha256": "1818a2a90d3eea5b38ad4d6e3cb1bd0394022ca62a8384734cefc36305d884eb"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelsBakeObjectAction:object:WebGapAnimChannelsBakeObject",
"bakeRange": [
1,
5
],
"step": 1,
"framesPerChannel": [
[
1,
2,
3,
4,
5
],
[
1,
2,
3,
4,
5
],
[
1,
2,
3,
4,
5
]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00154"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00153",
"parentTask": "M16-GAP-00152",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNELS_BAKE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00152/manifest.json", "sha256": "8f13a4a4da0827dece7e371690d9c451203a6de4b909665c1a113a15b7ee68d2"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend", "sha256": "1818a2a90d3eea5b38ad4d6e3cb1bd0394022ca62a8384734cefc36305d884eb"},
"generator": {"path": "tools/web/generated/M16-GAP-00153.py", "sha256": "a1dba3b7bd0b5011eb2867f12428b89b9d76b103ebe6109e78c9711dfc0596de"},
"desktopChecker": {"path": "tools/web/check-action-channels-bake-desktop.py", "sha256": "87eccc9a6dd652d94cbe49e771937c39d223765ca7658e239e99017356613a2c"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "1aeef2ac3cfcf702f568886265840aff4b528a8082cd81a95de3870bd4944c4f"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00153/anim-channels-bake-desktop-report.json", "sha256": "bcc459445eb7da0b2898302b72b726cd128572a25c23012dc7dfee9b03d945a6"},
"webReport": {"path": "tests/golden/M16-GAP-00153/anim-channels-bake-local-exact-report.json", "sha256": "517f2a16e4a3a46e52709c58987e940d1c07235adc8c4c9d6401363173c7d09b"},
"taskContext": {"path": "tests/golden/M16-GAP-00153/task-context.json", "sha256": "076fcdce0aaede9f992ce804e4e2cabbc2bbc69a0316038bba6880704933d26d"}
},
"nextTask": "M16-GAP-00154"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00153",
"parentTask": "M16-GAP-00152",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channels_bake data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channels_bake",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00153.py -- tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00153",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00153"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00153.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3167,
"contextRemainingTokens": 791
},
"source": {
"bytes": 6737,
"tokens": 1685
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00153.py",
"bytes": 2235,
"tokens": 559
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00153-operator-anim.channels_bake.blend",
"bytes": 87182,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 287254,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00153/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00153.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00153/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2235,
"tokens": 559
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00154",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00153.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00152/manifest.json",
"parentStatus": "docs/status/M16-GAP-00152.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00153.md",
"tests/golden/M16-GAP-00152/manifest.json",
"docs/status/M16-GAP-00152.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00152",
"parentTask": "M16-GAP-00151",
"status": "done",
"nextTask": "M16-GAP-00153",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00152 Status",
"status: done",
"task: anim.channel_view_pick operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channel_view_pick` frames the shared location-channel range.",
"evidence:",
"- Blender desktop and WASM/Main expose the same Action Editor `view2d.cur` and mask around frames 1 through 5."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1779,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 445
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00153.md",
"bytes": 1779,
"lines": 38,
"tokens": 445
},
{
"path": "tests/golden/M16-GAP-00152/manifest.json",
"bytes": 2234,
"lines": 26,
"tokens": 559
},
{
"path": "docs/status/M16-GAP-00152.md",
"bytes": 556,
"lines": 18,
"tokens": 139
}
],
"sourceTokens": 1685,
"evidenceFiles": 1,
"evidenceBytes": 2235,
"evidenceTokens": 559,
"totalTokens": 2244,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3268,
"serializedContextTokens": 753,
"withinBudget": true
}
}

View File

@@ -0,0 +1,42 @@
{
"blenderVersion": "5.2.0 LTS",
"emptyAnimDataRemoved": true,
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend",
"fixtureSha256": "8e1c2b7578c3679a5c1ad63aef3a621f7a6f8c486598c936076a81fc19728c7a",
"keepAction": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location"
}
],
"name": "WebGapAnimChannelsCleanKeepObjectAction"
},
"operation": "ANIM_CHANNELS_CLEAN_EMPTY_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00154"
}

View File

@@ -0,0 +1,41 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00154",
"operation": "ANIM_CHANNELS_CLEAN_EMPTY_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend",
"sha256": "8e1c2b7578c3679a5c1ad63aef3a621f7a6f8c486598c936076a81fc19728c7a"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelsCleanKeepObjectAction:object:WebGapAnimChannelsCleanKeepObject",
"emptyAnimDataRemoved": true,
"keepFramesPerChannel": [
[
1,
3,
5
],
[
1,
3,
5
],
[
1,
3,
5
]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00155"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00154",
"parentTask": "M16-GAP-00153",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNELS_CLEAN_EMPTY_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00153/manifest.json", "sha256": "6d06064ba97203528fdfbc6cd6acc769e1cf86eb7a03a4c8ea55fa15837da941"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend", "sha256": "8e1c2b7578c3679a5c1ad63aef3a621f7a6f8c486598c936076a81fc19728c7a"},
"generator": {"path": "tools/web/generated/M16-GAP-00154.py", "sha256": "0deaaa7054c65927a2cdd8c5ebbce257ea05a0b81e0c4df98d6cca559553af0d"},
"desktopChecker": {"path": "tools/web/check-action-channels-clean-empty-desktop.py", "sha256": "f6a8ef3666d4672e53d9678c3d9f0dd0f9ee92f9d05e4078f81555a9ea047d20"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "8ae5d6c9722df240a474dde37ec8f9a783eb12326e86a372090a7b35987b4643"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-desktop-report.json", "sha256": "592c8f75f00e03e0af3f8cc6de4b9b681ab2d1c5546826d363a01be41e498848"},
"webReport": {"path": "tests/golden/M16-GAP-00154/anim-channels-clean-empty-local-exact-report.json", "sha256": "ec0ae1e60911edfaee779d6ed6c52fb5965d7b182534e1864c27aaaaeb1a7795"},
"taskContext": {"path": "tests/golden/M16-GAP-00154/task-context.json", "sha256": "e03fd089cd8874792ee9c5aeaf32843742f0522ad71f47c12c1e5ef674c4352c"}
},
"nextTask": "M16-GAP-00155"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00154",
"parentTask": "M16-GAP-00153",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channels_clean_empty data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channels_clean_empty",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00154.py -- tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00154",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00154"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00154.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3134,
"contextRemainingTokens": 782
},
"source": {
"bytes": 6770,
"tokens": 1694
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00154.py",
"bytes": 3020,
"tokens": 755
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00154-operator-anim.channels_clean_empty.blend",
"bytes": 87446,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 290653,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00154/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00154.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00154/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 3020,
"tokens": 755
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00155",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00154.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00153/manifest.json",
"parentStatus": "docs/status/M16-GAP-00153.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00154.md",
"tests/golden/M16-GAP-00153/manifest.json",
"docs/status/M16-GAP-00153.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00153",
"parentTask": "M16-GAP-00152",
"status": "done",
"nextTask": "M16-GAP-00154",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00153 Status",
"status: done",
"task: anim.channels_bake operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channels_bake` bakes selected location channels over scene frames 1 through 5 at step 1.",
"evidence:",
"- Blender desktop and WASM/Main expose identical 1, 2, 3, 4, 5 keyframes on all three location channels."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1814,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 454
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00154.md",
"bytes": 1814,
"lines": 38,
"tokens": 454
},
{
"path": "tests/golden/M16-GAP-00153/manifest.json",
"bytes": 2214,
"lines": 26,
"tokens": 554
},
{
"path": "docs/status/M16-GAP-00153.md",
"bytes": 574,
"lines": 18,
"tokens": 144
}
],
"sourceTokens": 1694,
"evidenceFiles": 1,
"evidenceBytes": 3020,
"evidenceTokens": 755,
"totalTokens": 2449,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3473,
"serializedContextTokens": 758,
"withinBudget": true
}
}

View File

@@ -0,0 +1,60 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location",
"selected": [
true,
true,
true
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location",
"selected": [
false,
false,
false
]
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location",
"selected": [
false,
false,
false
]
}
],
"name": "WebGapAnimChannelsClickObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"clickedChannel": {
"index": 0,
"path": "location"
},
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend",
"fixtureSha256": "6ebd45981b70fb1a915008d4fa4d8c574b02bf5440b49e93e16792b819a721e5",
"operation": "ANIM_CHANNELS_CLICK_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00155"
}

View File

@@ -0,0 +1,36 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00155",
"operation": "ANIM_CHANNELS_CLICK_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend",
"sha256": "6ebd45981b70fb1a915008d4fa4d8c574b02bf5440b49e93e16792b819a721e5"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelsClickObjectAction:object:WebGapAnimChannelsClickObject",
"clickedChannel": {
"path": "location",
"index": 0
},
"selectedPerChannel": [
[
1,
3,
5
],
[],
[]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00156"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00155",
"parentTask": "M16-GAP-00154",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNELS_CLICK_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00154/manifest.json", "sha256": "ac81b87051b86d75e8ec23c7494c5cb9756a7c6093e1c9774ed3e10af9ffe023"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend", "sha256": "6ebd45981b70fb1a915008d4fa4d8c574b02bf5440b49e93e16792b819a721e5"},
"generator": {"path": "tools/web/generated/M16-GAP-00155.py", "sha256": "14be8a2dd379b1bbb1504618a18f15fa1aa64fba64c29569896b3e5d32f3e001"},
"desktopChecker": {"path": "tools/web/check-action-channels-click-desktop.py", "sha256": "3984998cbb1a42541f447b317777ed96183147fbb470d2842bdf1d7bfc8aa600"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "f06421aac25143c933e71af61b4cc67ddd785f0cab8b6d7f28b43bccded90d67"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00155/anim-channels-click-desktop-report.json", "sha256": "c080797b74218a9ca21654420e96138ae7fc7e795d9f821a1ca1285bdb08038e"},
"webReport": {"path": "tests/golden/M16-GAP-00155/anim-channels-click-local-exact-report.json", "sha256": "f76c822378b6dffd7a247354d33874515aa551e952401e82188a6e7337a67d55"},
"taskContext": {"path": "tests/golden/M16-GAP-00155/task-context.json", "sha256": "b47551bafd1fd13f5ed2cd5e9dbf642df1472c6403e1b4c8902e3c6802026146"}
},
"nextTask": "M16-GAP-00156"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00155",
"parentTask": "M16-GAP-00154",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channels_click data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channels_click",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00155.py -- tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00155",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00155"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00155.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3079,
"contextRemainingTokens": 769
},
"source": {
"bytes": 6825,
"tokens": 1707
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00155.py",
"bytes": 3046,
"tokens": 762
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00155-operator-anim.channels_click.blend",
"bytes": 87124,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 294077,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00155/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00155.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00155/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 3046,
"tokens": 762
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00156",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00155.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00154/manifest.json",
"parentStatus": "docs/status/M16-GAP-00154.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00155.md",
"tests/golden/M16-GAP-00154/manifest.json",
"docs/status/M16-GAP-00154.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00154",
"parentTask": "M16-GAP-00153",
"status": "done",
"nextTask": "M16-GAP-00155",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00154 Status",
"status: done",
"task: anim.channels_clean_empty operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channels_clean_empty` removes an empty AnimData container while preserving a populated Action.",
"evidence:",
"- Blender desktop and WASM/Main show the empty object's AnimData removed and the keep object's three location channels at frames 1, 3, and 5."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1784,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 446
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00155.md",
"bytes": 1784,
"lines": 38,
"tokens": 446
},
{
"path": "tests/golden/M16-GAP-00154/manifest.json",
"bytes": 2249,
"lines": 26,
"tokens": 563
},
{
"path": "docs/status/M16-GAP-00154.md",
"bytes": 624,
"lines": 18,
"tokens": 156
}
],
"sourceTokens": 1707,
"evidenceFiles": 1,
"evidenceBytes": 3046,
"evidenceTokens": 762,
"totalTokens": 2469,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3493,
"serializedContextTokens": 753,
"withinBudget": true
}
}

View File

@@ -0,0 +1,42 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location"
}
],
"name": "WebGapAnimChannelsCollapseObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"collapsedAll": true,
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend",
"fixtureSha256": "6b6c488604fa8dd8ec8e79f97961a4e74f6ca673a14658dd890a0b85e18a4dc9",
"operation": "ANIM_CHANNELS_COLLAPSE_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00156"
}

View File

@@ -0,0 +1,41 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00156",
"operation": "ANIM_CHANNELS_COLLAPSE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend",
"sha256": "6b6c488604fa8dd8ec8e79f97961a4e74f6ca673a14658dd890a0b85e18a4dc9"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelsCollapseObjectAction:object:WebGapAnimChannelsCollapseObject",
"collapsedAll": true,
"framesPerChannel": [
[
1,
3,
5
],
[
1,
3,
5
],
[
1,
3,
5
]
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00157"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00156",
"parentTask": "M16-GAP-00155",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNELS_COLLAPSE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00155/manifest.json", "sha256": "d892467c0a86ff05be0a9570f70ea5f52ab713b44177a8e65b096e7186a31471"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend", "sha256": "6b6c488604fa8dd8ec8e79f97961a4e74f6ca673a14658dd890a0b85e18a4dc9"},
"generator": {"path": "tools/web/generated/M16-GAP-00156.py", "sha256": "63e9b942070f44dcd5b8a20f82aca62d880d57a5955ff8f82914b9a9f92dcf60"},
"desktopChecker": {"path": "tools/web/check-action-channels-collapse-desktop.py", "sha256": "e899e95b4bda42f69040d24396d007eae2f35acd1c44594ecf4c25a4d0e1e6c"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "bf5cf9f49c143b9db163922d8c43424a69f55969e83c928bd6835c2ef0fbdeb7"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00156/anim-channels-collapse-desktop-report.json", "sha256": "0c7633299bc11c3b2dcc6c255e557b625d61e4a6214b717dd19f7eaf59e2c06a"},
"webReport": {"path": "tests/golden/M16-GAP-00156/anim-channels-collapse-local-exact-report.json", "sha256": "469e345742980e8647110df56278592ac12e6b945b6d45e11f9ec2da5c8cb094"},
"taskContext": {"path": "tests/golden/M16-GAP-00156/task-context.json", "sha256": "67d970a10a88c35ee050d4b35ed5dba501907c669c9d36467e9e4151c7593c15"}
},
"nextTask": "M16-GAP-00157"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00156",
"parentTask": "M16-GAP-00155",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channels_collapse data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channels_collapse",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00156.py -- tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00156",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00156"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00156.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3149,
"contextRemainingTokens": 786
},
"source": {
"bytes": 6755,
"tokens": 1690
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00156.py",
"bytes": 2136,
"tokens": 534
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00156-operator-anim.channels_collapse.blend",
"bytes": 87090,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 297320,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00156/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00156.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00156/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2136,
"tokens": 534
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00157",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00156.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00155/manifest.json",
"parentStatus": "docs/status/M16-GAP-00155.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00156.md",
"tests/golden/M16-GAP-00155/manifest.json",
"docs/status/M16-GAP-00155.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00155",
"parentTask": "M16-GAP-00154",
"status": "done",
"nextTask": "M16-GAP-00156",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00155 Status",
"status: done",
"task: anim.channels_click operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channels_click` selects the first location channel.",
"evidence:",
"- Blender desktop and WASM/Main expose the same selected location index 0 keys at frames 1, 3, and 5; other channels remain unselected."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1799,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 450
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00156.md",
"bytes": 1799,
"lines": 38,
"tokens": 450
},
{
"path": "tests/golden/M16-GAP-00155/manifest.json",
"bytes": 2219,
"lines": 26,
"tokens": 555
},
{
"path": "docs/status/M16-GAP-00155.md",
"bytes": 569,
"lines": 18,
"tokens": 143
}
],
"sourceTokens": 1690,
"evidenceFiles": 1,
"evidenceBytes": 2136,
"evidenceTokens": 534,
"totalTokens": 2224,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3248,
"serializedContextTokens": 756,
"withinBudget": true
}
}

View File

@@ -0,0 +1,18 @@
{
"action": {
"channels": [],
"name": "WebGapAnimChannelsDeleteObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"deletedChannel": {
"index": 0,
"path": "location"
},
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend",
"fixtureSha256": "c5355b82bb3ce08f8a55d436eb47e2e8cd49711c6518e016c13345c5a8683876",
"operation": "ANIM_CHANNELS_DELETE_DESKTOP",
"remainingChannels": 0,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00157"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00157",
"operation": "ANIM_CHANNELS_DELETE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend",
"sha256": "c5355b82bb3ce08f8a55d436eb47e2e8cd49711c6518e016c13345c5a8683876"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": null,
"deletedChannel": {
"path": "location",
"index": 0
},
"remainingChannels": 0
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00158"
}

View File

@@ -0,0 +1,25 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00157",
"parentTask": "M16-GAP-00156",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNELS_DELETE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00156/manifest.json", "sha256": "f3e9b44c3cb8ca2895325476e38835a32a604443da09d17f1455c6a78366bd7e"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend", "sha256": "c5355b82bb3ce08f8a55d436eb47e2e8cd49711c6518e016c13345c5a8683876"},
"generator": {"path": "tools/web/generated/M16-GAP-00157.py", "sha256": "5613100e6c50539e8dd7371cd3c4e2c8469ec3ca384c42126e11a210ad0d5d7b"},
"desktopChecker": {"path": "tools/web/check-action-channels-delete-desktop.py", "sha256": "b340793fe720b0bd60ca3d81a19c4a9bfba2c679b91bd2d6cbe371fe2e4ef657"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b7a2194bb16b83564f91be92d5dcbc7e9013de650afcd11a48ec720503642303"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "4a1733632ae8418f0bc835c3b4a14b9d69985cb85b74faaca314fa48ec18fd0e"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "d040c839999e125ab7693907fa69245105abde641b5d0839ee9990af4c5f0e21"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00157/anim-channels-delete-desktop-report.json", "sha256": "330b2caa7f2f2dcbf4f903a8ac8bd1fdaf22fa676014fd0a2aa58675c28e77e3"},
"webReport": {"path": "tests/golden/M16-GAP-00157/anim-channels-delete-local-exact-report.json", "sha256": "667833b173528247f33341fe15edf52b4389bc44e0de4a6dc1fb2e14ee57a986"},
"taskContext": {"path": "tests/golden/M16-GAP-00157/task-context.json", "sha256": "94c06044e7620dfb82d250775d7a8460cebcb13327e805442ff47585b610574a"}
},
"nextTask": "M16-GAP-00158"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00157",
"parentTask": "M16-GAP-00156",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channels_delete data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channels_delete",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00157.py -- tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00157",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00157"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00157.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3164,
"contextRemainingTokens": 789
},
"source": {
"bytes": 6740,
"tokens": 1687
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00157.py",
"bytes": 2519,
"tokens": 630
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00157-operator-anim.channels_delete.blend",
"bytes": 86834,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227216,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 300509,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00157/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00157.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00157/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2519,
"tokens": 630
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00158",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00157.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00156/manifest.json",
"parentStatus": "docs/status/M16-GAP-00156.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00157.md",
"tests/golden/M16-GAP-00156/manifest.json",
"docs/status/M16-GAP-00156.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00156",
"parentTask": "M16-GAP-00155",
"status": "done",
"nextTask": "M16-GAP-00157",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00156 Status",
"status: done",
"task: anim.channels_collapse operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channels_collapse` collapses all channels.",
"evidence:",
"- Blender desktop and WASM/Main preserve the same three location channels at frames 1, 3, and 5 after `all=true` collapse."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1789,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 448
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00157.md",
"bytes": 1789,
"lines": 38,
"tokens": 448
},
{
"path": "tests/golden/M16-GAP-00156/manifest.json",
"bytes": 2233,
"lines": 26,
"tokens": 559
},
{
"path": "docs/status/M16-GAP-00156.md",
"bytes": 550,
"lines": 18,
"tokens": 138
}
],
"sourceTokens": 1687,
"evidenceFiles": 1,
"evidenceBytes": 2519,
"evidenceTokens": 630,
"totalTokens": 2317,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3341,
"serializedContextTokens": 754,
"withinBudget": true
}
}

View File

@@ -0,0 +1,45 @@
{
"action": {
"channels": [
{
"editable": false,
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location"
},
{
"editable": false,
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location"
},
{
"editable": false,
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location"
}
],
"name": "WebGapAnimChannelsEditableToggleObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend",
"fixtureSha256": "6a983e51050eb6a6b8300c153216a37d61a16e20c09716405c6d9a96912a612f",
"operation": "ANIM_CHANNELS_EDITABLE_TOGGLE_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00158",
"toggledChannels": 3
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00158",
"operation": "ANIM_CHANNELS_EDITABLE_TOGGLE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend",
"sha256": "6a983e51050eb6a6b8300c153216a37d61a16e20c09716405c6d9a96912a612f"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelsEditableToggleObjectAction:object:WebGapAnimChannelsEditableToggleObject",
"toggledChannels": 3,
"editablePerChannel": [
false,
false,
false
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00159"
}

View File

@@ -0,0 +1,26 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00158",
"parentTask": "M16-GAP-00157",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNELS_EDITABLE_TOGGLE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00157/manifest.json", "sha256": "5dc8520ec503a6f19ea783fa4fc56b8044eaa03ad616fece21152b23a4eb8cda"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend", "sha256": "6a983e51050eb6a6b8300c153216a37d61a16e20c09716405c6d9a96912a612f"},
"generator": {"path": "tools/web/generated/M16-GAP-00158.py", "sha256": "1cc7409084194b006ae60b80da804de4972e671e073b6762353f9db516ea05df"},
"desktopChecker": {"path": "tools/web/check-action-channels-editable-toggle-desktop.py", "sha256": "9d16d09a1f009d160731523de610360a0bc9dd730648b1f9251ef9a8c6e61428"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "6613d6d147b1cd41ca1b9e8faf925aa0b7f5d5add5ea35013f59fa8ea395ab42"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "44f794476cbfd72df85f707267c9c7bddf90bb2e371c61fd5e450d2ba5a0fb17"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "42df0f68f725c93683620d095add7aa82df17c70fa6dbf2e7b13307f6d04525a"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "42df0f68f725c93683620d095add7aa82df17c70fa6dbf2e7b13307f6d04525a"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-desktop-report.json", "sha256": "c700699f731764385ab6a9103adfc3592effdae2dc09b913682b134de16298f5"},
"webReport": {"path": "tests/golden/M16-GAP-00158/anim-channels-editable-toggle-local-exact-report.json", "sha256": "4e1e28c4baa75abd098eaed07ea83fda9676d6bd875dafac9742bd1d89cf16dd"},
"status": {"path": "docs/status/M16-GAP-00158.md", "sha256": "7cbb2c0af79def8810641264087eba11d45a8d6cf5d63710364dc6c970fea382"},
"taskContext": {"path": "tests/golden/M16-GAP-00158/task-context.json", "sha256": "35a89633fba80fbb4df306e948e31117bf1189e7a9c9b8458e391d3cdbb3ae45"}
},
"nextTask": "M16-GAP-00159"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00158",
"parentTask": "M16-GAP-00157",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channels_editable_toggle data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channels_editable_toggle",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00158.py -- tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00158",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00158"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00158.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3085,
"contextRemainingTokens": 770
},
"source": {
"bytes": 6819,
"tokens": 1706
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00158.py",
"bytes": 2795,
"tokens": 699
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00158-operator-anim.channels_editable_toggle.blend",
"bytes": 87112,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227353,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 304028,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00158/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00158.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00158/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2795,
"tokens": 699
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00159",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00158.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00157/manifest.json",
"parentStatus": "docs/status/M16-GAP-00157.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00158.md",
"tests/golden/M16-GAP-00157/manifest.json",
"docs/status/M16-GAP-00157.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00157",
"parentTask": "M16-GAP-00156",
"status": "done",
"nextTask": "M16-GAP-00158",
"artifactCount": 12
},
"statusSummary": [
"# M16-GAP-00157 Status",
"status: done",
"task: anim.channels_delete operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channels_delete` deletes the selected location[0] FCurve.",
"evidence:",
"- Blender desktop and WASM/Main show the Action emptied after deleting the only location channel; the WASM snapshot correctly omits the empty animation."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1834,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 459
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00158.md",
"bytes": 1834,
"lines": 38,
"tokens": 459
},
{
"path": "tests/golden/M16-GAP-00157/manifest.json",
"bytes": 2224,
"lines": 26,
"tokens": 556
},
{
"path": "docs/status/M16-GAP-00157.md",
"bytes": 593,
"lines": 18,
"tokens": 149
}
],
"sourceTokens": 1706,
"evidenceFiles": 1,
"evidenceBytes": 2795,
"evidenceTokens": 699,
"totalTokens": 2405,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3429,
"serializedContextTokens": 761,
"withinBudget": true
}
}

View File

@@ -0,0 +1,51 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"group": "Object Transforms",
"index": 0,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"group": "Object Transforms",
"index": 1,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"group": "Object Transforms",
"index": 2,
"path": "location"
}
],
"groups": [
{
"expanded": true,
"name": "Object Transforms"
}
],
"name": "WebGapAnimChannelsExpandObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"expandedGroups": 1,
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend",
"fixtureSha256": "7e8658f9238b0cfbb08775388cddf2f7e453c6a2683fe908974b0dd55a852ca7",
"operation": "ANIM_CHANNELS_EXPAND_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00159"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00159",
"operation": "ANIM_CHANNELS_EXPAND_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend",
"sha256": "7e8658f9238b0cfbb08775388cddf2f7e453c6a2683fe908974b0dd55a852ca7"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelsExpandObjectAction:object:WebGapAnimChannelsExpandObject",
"expandedGroups": 1,
"group": {
"name": "Object Transforms",
"expanded": true
}
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00160"
}

View File

@@ -0,0 +1,26 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00159",
"parentTask": "M16-GAP-00158",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNELS_EXPAND_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00158/manifest.json", "sha256": "f8754729d3afff4daf866d6d3126da8ce8218bb3ecc0f9e9bb5d173d4c860cff"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend", "sha256": "7e8658f9238b0cfbb08775388cddf2f7e453c6a2683fe908974b0dd55a852ca7"},
"generator": {"path": "tools/web/generated/M16-GAP-00159.py", "sha256": "04988ce930276e01b61838b48860601bb829fdaf7e7d9652eb1fa2f3b36b6f6b"},
"desktopChecker": {"path": "tools/web/check-action-channels-expand-desktop.py", "sha256": "b8cc37161161746bbf2cce1da08b0658fa5e911507b6049d5f05b1cc0abb7148"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "782b1261124bae08bebed36f2b3f07e5b0257a1e027ec6ae9328a84c3dd88541"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "3222ad3a0f40f5f29da642aed606542ef7cfc46f2a23744f70f8ca418922a7d2"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "de51dae3f6ddc3dabe65b302de6e04f13ddc2f68422f51595eba2f5a139e1d14"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "de51dae3f6ddc3dabe65b302de6e04f13ddc2f68422f51595eba2f5a139e1d14"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"},
"desktopReport": {"path": "tests/golden/M16-GAP-00159/anim-channels-expand-desktop-report.json", "sha256": "56feacbf947430f5799612b9e01395ec2f901f455ef1811af58315bc97981c58"},
"webReport": {"path": "tests/golden/M16-GAP-00159/anim-channels-expand-local-exact-report.json", "sha256": "705189c2b5571ee5645c50932fdff1bdaff3f9205cd031533969f1bc8d09418e"},
"status": {"path": "docs/status/M16-GAP-00159.md", "sha256": "f93526ce6fcafb2734cbe1c86ecde24da0e94c702b711e72efa080a25201d84f"},
"taskContext": {"path": "tests/golden/M16-GAP-00159/task-context.json", "sha256": "fc453afe062994a58a0bc5108a915f246afd8eb75b9a90cb30ec47fd92aac464"}
},
"nextTask": "M16-GAP-00160"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00159",
"parentTask": "M16-GAP-00158",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channels_expand data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channels_expand",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00159.py -- tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00159",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00159"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00159.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 2981,
"contextRemainingTokens": 744
},
"source": {
"bytes": 6923,
"tokens": 1732
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00159.py",
"bytes": 2485,
"tokens": 622
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00159-operator-anim.channels_expand.blend",
"bytes": 87114,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227825,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 307461,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00159/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00159.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00159/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2485,
"tokens": 622
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00160",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00159.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00158/manifest.json",
"parentStatus": "docs/status/M16-GAP-00158.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00159.md",
"tests/golden/M16-GAP-00158/manifest.json",
"docs/status/M16-GAP-00158.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00158",
"parentTask": "M16-GAP-00157",
"status": "done",
"nextTask": "M16-GAP-00159",
"artifactCount": 13
},
"statusSummary": [
"# M16-GAP-00158 Status",
"status: done",
"task: anim.channels_editable_toggle operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channels_editable_toggle` toggles the selected location channels to non-editable.",
"evidence:",
"- Blender desktop and WASM/Main expose all three location FCurves with `editable: false`."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1789,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 448
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00159.md",
"bytes": 1789,
"lines": 38,
"tokens": 448
},
{
"path": "tests/golden/M16-GAP-00158/manifest.json",
"bytes": 2403,
"lines": 27,
"tokens": 601
},
{
"path": "docs/status/M16-GAP-00158.md",
"bytes": 563,
"lines": 18,
"tokens": 141
}
],
"sourceTokens": 1732,
"evidenceFiles": 1,
"evidenceBytes": 2485,
"evidenceTokens": 622,
"totalTokens": 2354,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3378,
"serializedContextTokens": 754,
"withinBudget": true
}
}

View File

@@ -0,0 +1,45 @@
{
"action": {
"channels": [
{
"enabled": true,
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location_missing"
},
{
"enabled": true,
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location_missing"
},
{
"enabled": true,
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location_missing"
}
],
"name": "WebGapAnimChannelsFCurvesEnableObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"enabledChannels": 3,
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend",
"fixtureSha256": "091c8bd8ceb6206cd7ef7f5d8cac03dd4ee554c4ec13f588e8b9ef5933c24ebf",
"operation": "ANIM_CHANNELS_FCURVES_ENABLE_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00160"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00160",
"operation": "ANIM_CHANNELS_FCURVES_ENABLE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend",
"sha256": "091c8bd8ceb6206cd7ef7f5d8cac03dd4ee554c4ec13f588e8b9ef5933c24ebf"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelsFCurvesEnableObjectAction:object:WebGapAnimChannelsFCurvesEnableObject",
"enabledChannels": 3,
"enabledPerChannel": [
true,
true,
true
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00161"
}

View File

@@ -0,0 +1,69 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00160",
"parentTask": "M16-GAP-00159",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNELS_FCURVES_ENABLE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {
"path": "tests/golden/M16-GAP-00159/manifest.json",
"sha256": "32a6494adf77b384d699d713d469905309a115165a6a744a09d4c49979394650"
},
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend",
"sha256": "091c8bd8ceb6206cd7ef7f5d8cac03dd4ee554c4ec13f588e8b9ef5933c24ebf"
},
"generator": {
"path": "tools/web/generated/M16-GAP-00160.py",
"sha256": "83337ffc4859fc026819640065e8bf0aa889d5fd9b23815366a96190a45df956"
},
"desktopChecker": {
"path": "tools/web/check-action-channels-fcurves-enable-desktop.py",
"sha256": "0124b78950409836682c690f2158c76d8eba8fc2ab5c35b11aacb73dbc2ad5a9"
},
"webChecker": {
"path": "tools/web/check-generated-gap.mjs",
"sha256": "b4e73592fd6d0885985d0b09082335edbd49227dea46458e089c5c498ad0a8a3"
},
"reader": {
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"sha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3"
},
"protocol": {
"path": "web/protocol/scene-ir.ts",
"sha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d"
},
"wasm": {
"path": "web/app/src/vendor/blender/web_engine.wasm",
"sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3"
},
"wasmPublic": {
"path": "web/app/public/vendor/blender/web_engine.wasm",
"sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3"
},
"wasmJs": {
"path": "web/app/src/vendor/blender/web_engine.js",
"sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"
},
"desktopReport": {
"path": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-desktop-report.json",
"sha256": "694c307f9ccc22b4eca8e64185e5397bd778e45da07c5ad26a60120220ebe4c5"
},
"webReport": {
"path": "tests/golden/M16-GAP-00160/anim-channels-fcurves-enable-local-exact-report.json",
"sha256": "42b1b070a9975db3284dd616a3c101cf1ec1ee3701372f77eeb04e0a03e52b9a"
},
"status": {
"path": "docs/status/M16-GAP-00160.md",
"sha256": "b363159100041b87476b7263631cbf91bf02a83795eb8ce78e019d71e888ce55"
},
"taskContext": {
"path": "tests/golden/M16-GAP-00160/task-context.json",
"sha256": "c1a8d564de0ad1c377f22af1f6c8152256e66c3da974a5f18e2716f48334276e"
}
},
"nextTask": "M16-GAP-00161"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00160",
"parentTask": "M16-GAP-00159",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channels_fcurves_enable data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channels_fcurves_enable",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00160.py -- tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00160",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00160"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00160.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 2967,
"contextRemainingTokens": 740
},
"source": {
"bytes": 6937,
"tokens": 1736
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00160.py",
"bytes": 2684,
"tokens": 671
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00160-operator-anim.channels_fcurves_enable.blend",
"bytes": 87104,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227881,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 311071,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00160/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00160.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00160/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 2684,
"tokens": 671
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00161",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00160.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00159/manifest.json",
"parentStatus": "docs/status/M16-GAP-00159.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00160.md",
"tests/golden/M16-GAP-00159/manifest.json",
"docs/status/M16-GAP-00159.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00159",
"parentTask": "M16-GAP-00158",
"status": "done",
"nextTask": "M16-GAP-00160",
"artifactCount": 13
},
"statusSummary": [
"# M16-GAP-00159 Status",
"status: done",
"task: anim.channels_expand operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channels_expand(all=true)` expands the `Object Transforms` channel group.",
"evidence:",
"- Blender desktop and WASM/Main expose the group as `Object Transforms` with `expanded: true` on all three location channels."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1829,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 458
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00160.md",
"bytes": 1829,
"lines": 38,
"tokens": 458
},
{
"path": "tests/golden/M16-GAP-00159/manifest.json",
"bytes": 2358,
"lines": 27,
"tokens": 590
},
{
"path": "docs/status/M16-GAP-00159.md",
"bytes": 582,
"lines": 18,
"tokens": 146
}
],
"sourceTokens": 1736,
"evidenceFiles": 1,
"evidenceBytes": 2684,
"evidenceTokens": 671,
"totalTokens": 2407,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3431,
"serializedContextTokens": 760,
"withinBudget": true
}
}

View File

@@ -0,0 +1,48 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"group": "WebGapTransforms",
"index": 0,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"group": "WebGapTransforms",
"index": 1,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"group": "WebGapTransforms",
"index": 2,
"path": "location"
}
],
"groups": [
"WebGapTransforms"
],
"name": "WebGapAnimChannelsGroupObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend",
"fixtureSha256": "dfa3cbf7b6511926f549134cfd157e2c4350d9f2f4fa5c30dc01ada3dc071cea",
"groups": 1,
"operation": "ANIM_CHANNELS_GROUP_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00161"
}

View File

@@ -0,0 +1,26 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00161",
"operation": "ANIM_CHANNELS_GROUP_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend",
"sha256": "dfa3cbf7b6511926f549134cfd157e2c4350d9f2f4fa5c30dc01ada3dc071cea"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelsGroupObjectAction:object:WebGapAnimChannelsGroupObject",
"groups": 1,
"group": "WebGapTransforms",
"groupedChannels": 3
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00162"
}

View File

@@ -0,0 +1,69 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00161",
"parentTask": "M16-GAP-00160",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNELS_GROUP_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {
"path": "tests/golden/M16-GAP-00160/manifest.json",
"sha256": "7c045fa9b3bd97f6260a9b279d7dbc8d18cd3aabce33a8d095d9e4a7c08700df"
},
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend",
"sha256": "dfa3cbf7b6511926f549134cfd157e2c4350d9f2f4fa5c30dc01ada3dc071cea"
},
"generator": {
"path": "tools/web/generated/M16-GAP-00161.py",
"sha256": "f042c1f5ea55d2f146c81e9765b451ea2a58c82768095c76d632ea9de46b198e"
},
"desktopChecker": {
"path": "tools/web/check-action-channels-group-desktop.py",
"sha256": "0cf05f15c8441bdae97c96a44687b30527149165c16f1f31df10ff29e6fecb85"
},
"webChecker": {
"path": "tools/web/check-generated-gap.mjs",
"sha256": "6b26272a1d5973ecd263745b7cf127cbac656b999d1780e3ab0386ae4a0f4fa0"
},
"reader": {
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"sha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3"
},
"protocol": {
"path": "web/protocol/scene-ir.ts",
"sha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d"
},
"wasm": {
"path": "web/app/src/vendor/blender/web_engine.wasm",
"sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3"
},
"wasmPublic": {
"path": "web/app/public/vendor/blender/web_engine.wasm",
"sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3"
},
"wasmJs": {
"path": "web/app/src/vendor/blender/web_engine.js",
"sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"
},
"desktopReport": {
"path": "tests/golden/M16-GAP-00161/anim-channels-group-desktop-report.json",
"sha256": "c7df9940aecaa3fa127116325e053c182a183167d8f222e9af072c6415ef379b"
},
"webReport": {
"path": "tests/golden/M16-GAP-00161/anim-channels-group-local-exact-report.json",
"sha256": "e455f560ac9e6047b84971a96b3aa7f58ee4cf08dccf5f6394310820d10715d2"
},
"status": {
"path": "docs/status/M16-GAP-00161.md",
"sha256": "45a504a53e49b7e1df0d93b487125218aeaef5c5e227ba08e78f2681211a22bb"
},
"taskContext": {
"path": "tests/golden/M16-GAP-00161/task-context.json",
"sha256": "cdc0f7f91f24f2ede4406c025ce8ee0eec9898a512c8d255c915851537263f30"
}
},
"nextTask": "M16-GAP-00162"
}

View File

@@ -0,0 +1,182 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00161",
"parentTask": "M16-GAP-00160",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channels_group data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channels_group",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00161.py -- tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00161",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00161"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 2545,
"contextRemainingTokens": 635
},
"source": {
"bytes": 7359,
"tokens": 1841
},
"selected": [],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00161-operator-anim.channels_group.blend",
"bytes": 87091,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/generated/M16-GAP-00161.py",
"bytes": 2584,
"reason": "CONTEXT_REMAINING_SPACE"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227881,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 314588,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00161/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00161.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00161/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00162",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00161.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00160/manifest.json",
"parentStatus": "docs/status/M16-GAP-00160.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00161.md",
"tests/golden/M16-GAP-00160/manifest.json",
"docs/status/M16-GAP-00160.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00160",
"parentTask": "M16-GAP-00159",
"status": "done",
"nextTask": "M16-GAP-00161",
"artifactCount": 14
},
"statusSummary": [
"# M16-GAP-00160 Status",
"status: done",
"task: anim.channels_fcurves_enable operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channels_fcurves_enable` preserves three location F-Curves and exposes their enabled state.",
"evidence:",
"- Blender desktop and WASM/Main expose all three `location_missing` channels with `enabled: true` after the operator path."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1784,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 446
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00161.md",
"bytes": 1784,
"lines": 38,
"tokens": 446
},
{
"path": "tests/golden/M16-GAP-00160/manifest.json",
"bytes": 2782,
"lines": 70,
"tokens": 696
},
{
"path": "docs/status/M16-GAP-00160.md",
"bytes": 625,
"lines": 18,
"tokens": 157
}
],
"sourceTokens": 1841,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 1841,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 2865,
"serializedContextTokens": 718,
"withinBudget": true
}
}

View File

@@ -0,0 +1,42 @@
{
"action": {
"channels": [
{
"frames": [
1.0,
3.0,
5.0
],
"index": 1,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 0,
"path": "location"
},
{
"frames": [
1.0,
3.0,
5.0
],
"index": 2,
"path": "location"
}
],
"name": "WebGapAnimChannelsMoveObjectAction"
},
"blenderVersion": "5.2.0 LTS",
"direction": "DOWN",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend",
"fixtureSha256": "d75500ad33614d2ebe9cf705757971cb76556ae18b77b1064e13420f514f41ea",
"operation": "ANIM_CHANNELS_MOVE_DESKTOP",
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00162"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00162",
"operation": "ANIM_CHANNELS_MOVE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend",
"sha256": "d75500ad33614d2ebe9cf705757971cb76556ae18b77b1064e13420f514f41ea"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json",
"saveReopen": "EXACT"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAnimChannelsMoveObjectAction:object:WebGapAnimChannelsMoveObject",
"direction": "DOWN",
"channelOrder": [
1,
0,
2
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00163"
}

View File

@@ -0,0 +1,69 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00162",
"parentTask": "M16-GAP-00161",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ANIM_CHANNELS_MOVE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {
"path": "tests/golden/M16-GAP-00161/manifest.json",
"sha256": "7c045fa9b3bd97f6260a9b279d7dbc8d18cd3aabce33a8d095d9e4a7c08700df"
},
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend",
"sha256": "d75500ad33614d2ebe9cf705757971cb76556ae18b77b1064e13420f514f41ea"
},
"generator": {
"path": "tools/web/generated/M16-GAP-00162.py",
"sha256": "ac23b4652f68035ba12003a44c75d7104be17132f8a2edce5f9b3f64052a57d4"
},
"desktopChecker": {
"path": "tools/web/check-action-channels-move-desktop.py",
"sha256": "0410afc446a73d3083d96fde83b36b3c1754e133b95af2554de064ab928ded5f"
},
"webChecker": {
"path": "tools/web/check-generated-gap.mjs",
"sha256": "b42cc0902df0d537c6a38b4f313ad02df81a7e6a1950f7e0b255dabd79b2e74b"
},
"reader": {
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"sha256": "84fae3b308277e75496849efa3e456418237e77ba7fb1cb6086231dd9d4502d3"
},
"protocol": {
"path": "web/protocol/scene-ir.ts",
"sha256": "3549b6c6acd1cf4e0bb90ea5b0523987a23dd40e0541e97ae341529281a72e1d"
},
"wasm": {
"path": "web/app/src/vendor/blender/web_engine.wasm",
"sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3"
},
"wasmPublic": {
"path": "web/app/public/vendor/blender/web_engine.wasm",
"sha256": "214c3f0e7dd39ae3ca581095049946ecdae65cb6707011b9e9b90a401a73f1c3"
},
"wasmJs": {
"path": "web/app/src/vendor/blender/web_engine.js",
"sha256": "9c831d0351ac9d0714cce3b1da748cba416ced3086e3c59595cf24ac4da459ed"
},
"desktopReport": {
"path": "tests/golden/M16-GAP-00162/anim-channels-move-desktop-report.json",
"sha256": "8b12fad79622d6171f5afce0017b89cae20fea109dacc0851c10c8d96d19f1c0"
},
"webReport": {
"path": "tests/golden/M16-GAP-00162/anim-channels-move-local-exact-report.json",
"sha256": "0dad9d166f9fdd3466f0a96bc32e02118259a5aa7ac8312d716c93fb0b8fcf31"
},
"status": {
"path": "docs/status/M16-GAP-00162.md",
"sha256": "PENDING"
},
"taskContext": {
"path": "tests/golden/M16-GAP-00162/task-context.json",
"sha256": "PENDING"
}
},
"nextTask": "M16-GAP-00163"
}

View File

@@ -0,0 +1,182 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00162",
"parentTask": "M16-GAP-00161",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:anim.channels_move data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:anim.channels_move",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00162.py -- tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00162",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00162"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 2636,
"contextRemainingTokens": 658
},
"source": {
"bytes": 7268,
"tokens": 1818
},
"selected": [],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00162-operator-anim.channels_move.blend",
"bytes": 87080,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/generated/M16-GAP-00162.py",
"bytes": 2996,
"reason": "CONTEXT_REMAINING_SPACE"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 227881,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 317878,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00162/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00162.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00162/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00163",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00162.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00161/manifest.json",
"parentStatus": "docs/status/M16-GAP-00161.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00162.md",
"tests/golden/M16-GAP-00161/manifest.json",
"docs/status/M16-GAP-00161.md"
],
"machineOnly": [
"tests/golden/M15-03A/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": "M16-GAP-00161",
"parentTask": "M16-GAP-00160",
"status": "done",
"nextTask": "M16-GAP-00162",
"artifactCount": 14
},
"statusSummary": [
"# M16-GAP-00161 Status",
"status: done",
"task: anim.channels_group operator LOCAL_EXACT slice",
"updated: 2026-08-21 America/New_York",
"scope:",
"- Action Editor `anim.channels_group` assigns the three selected location F-Curves to `WebGapTransforms`.",
"evidence:",
"- Blender desktop and WASM/Main expose all three channels with the exact `WebGapTransforms` group."
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1779,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 445
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2168,
"lines": 45,
"tokens": 542
},
{
"path": "docs/tasks/M16-GAP-00162.md",
"bytes": 1779,
"lines": 38,
"tokens": 445
},
{
"path": "tests/golden/M16-GAP-00161/manifest.json",
"bytes": 2737,
"lines": 70,
"tokens": 685
},
{
"path": "docs/status/M16-GAP-00161.md",
"bytes": 584,
"lines": 18,
"tokens": 146
}
],
"sourceTokens": 1818,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 1818,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 2842,
"serializedContextTokens": 717,
"withinBudget": true
}
}

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