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

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