Complete M16 asset operator parity chain
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-23 18:10:00 -04:00
parent c0d471da01
commit 5c8cfd1a8c
127 changed files with 5574 additions and 47 deletions

View File

@@ -11,10 +11,10 @@
| 字段 | 值 | | 字段 | 值 |
| --- | --- | | --- | --- |
| 里程碑 | M16 Main、Mesh、Modifier、Sculpt | | 里程碑 | M16 Main、Mesh、Modifier、Sculpt |
| 当前任务 | `M16-GAP-00264` | | 当前任务 | `M16-GAP-00276` |
| parent manifest | `tests/golden/M16-GAP-00263/manifest.json` | | parent manifest | `tests/golden/M16-GAP-00275/manifest.json` |
| 任务卡 | [`tasks/M16-GAP-00264.md`](tasks/M16-GAP-00264.md) | | 任务卡 | [`tasks/M16-GAP-00276.md`](tasks/M16-GAP-00276.md) |
| 专项验收 | `npm --prefix web run test:generated-gap -- --task M16-GAP-00264` | | 专项验收 | `npm --prefix web run test:generated-gap -- --task M16-GAP-00276` |
领取前执行: 领取前执行:

View File

@@ -0,0 +1,25 @@
# M16-GAP-00264 Status
status: done
task: asset.asset_download operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture contains one fake-user external Image with source path
`//assets/WebGapAssetDownload.png`. Blender desktop enables online access for
the isolated check, runs `ASSET_OT_asset_download` for a missing remote
relative identifier, and records the real `CANCELLED` result with no Main
mutation. Save/reopen preserves the image resource fields exactly.
- WASM/Main reads the same fixture as an external, unpacked Image with stable
`assetStatus=EXTERNAL`, `assetId`, source path, and dimensions. The comparator
confirms save/reopen stability and malformed-input rejection without Main
mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made.
nextTask: `M16-GAP-00265`

View File

@@ -0,0 +1,25 @@
# M16-GAP-00265 Status
status: done
task: asset.assets_download operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture contains one fake-user external Image with source path
`//assets/WebGapAssetsDownload.png`. Blender desktop enables online access,
confirms `ASSET_OT_assets_download.poll()` is false, and records the real
`CANCELLED` result with no Main mutation. Save/reopen preserves the image
resource fields exactly.
- WASM/Main reads the same fixture as an external, unpacked Image with stable
`assetStatus=EXTERNAL`, `assetId`, source path, and dimensions. The
comparator confirms save/reopen stability and malformed-input rejection
without Main mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made.
nextTask: `M16-GAP-00266`

View File

@@ -0,0 +1,24 @@
# M16-GAP-00266 Status
status: done
task: asset.assign_action operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture contains one fake-user `WebGapAssignAction` with a two-key
`location[0]` channel assigned to `WebGapAssignActionObject`. Blender
desktop observes the no-Asset-Shelf context as `poll=false`, records the
real `CANCELLED` result from `ASSET_OT_assign_action`, and confirms no Main
mutation. Save/reopen preserves the Action exactly.
- WASM/Main reads the same fixture as one stable Action animation targeting
`object:WebGapAssignActionObject`. The comparator confirms both keyframes,
save/reopen stability, and malformed-input rejection without Main mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made.
nextTask: `M16-GAP-00267`

View File

@@ -0,0 +1,26 @@
# M16-GAP-00267 Status
status: done
task: asset.browse_containing_blend_file operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture links one object from external `WebGapBrowseContaining.blend`.
Blender desktop observes the no-selected-asset boundary as `poll=false`,
records `CANCELLED` for `ASSET_OT_browse_containing_blend_file`, and confirms
no Main mutation. Save/reopen preserves the Library record exactly.
- WASM/Main reads the same external Library with stable source path,
`EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator
confirms save/reopen stability and malformed-input rejection without Main
mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made. Blender's expected missing
external-library warning is recorded by the comparator while the Library
state remains exact.
nextTask: `M16-GAP-00268`

View File

@@ -0,0 +1,26 @@
# M16-GAP-00268 Status
status: done
task: asset.bundle_install operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture links one object from external `WebGapBundleInstall.blend`.
Blender desktop observes the no-bundle context as `poll=false`, records
`CANCELLED` for `ASSET_OT_bundle_install`, and confirms no Main mutation.
Save/reopen preserves the Library record exactly.
- WASM/Main reads the same external Library with stable source path,
`EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator
confirms save/reopen stability and malformed-input rejection without Main
mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made. Blender's expected missing
external-library warning is recorded by the comparator while the Library
state remains exact.
nextTask: `M16-GAP-00269`

View File

@@ -0,0 +1,26 @@
# M16-GAP-00269 Status
status: done
task: asset.catalog_delete operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture links one object from external `WebGapCatalogDelete.blend`.
Blender desktop observes the no-catalog-selection boundary as `poll=false`,
records `CANCELLED` for `ASSET_OT_catalog_delete`, and confirms no Main
mutation. Save/reopen preserves the Library record exactly.
- WASM/Main reads the same external Library with stable source path,
`EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator
confirms save/reopen stability and malformed-input rejection without Main
mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made. Blender's expected missing
external-library warning is recorded by the comparator while the Library
state remains exact.
nextTask: `M16-GAP-00270`

View File

@@ -0,0 +1,26 @@
# M16-GAP-00270 Status
status: done
task: asset.catalog_new operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture links one object from external `WebGapCatalogNew.blend`.
Blender desktop observes the no-catalog-selection boundary as `poll=false`,
records `CANCELLED` for `ASSET_OT_catalog_new`, and confirms no Main
mutation. Save/reopen preserves the Library record exactly.
- WASM/Main reads the same external Library with stable source path,
`EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator
confirms save/reopen stability and malformed-input rejection without Main
mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made. Blender's expected missing
external-library warning is recorded by the comparator while the Library
state remains exact.
nextTask: `M16-GAP-00271`

View File

@@ -0,0 +1,26 @@
# M16-GAP-00271 Status
status: done
task: asset.catalog_redo operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture links one object from external `WebGapCatalogRedo.blend`.
Blender desktop observes the no-catalog-selection boundary as `poll=false`,
records `CANCELLED` for `ASSET_OT_catalog_redo`, and confirms no Main
mutation. Save/reopen preserves the Library record exactly.
- WASM/Main reads the same external Library with stable source path,
`EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator
confirms save/reopen stability and malformed-input rejection without Main
mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made. Blender's expected missing
external-library warning is recorded by the comparator while the Library
state remains exact.
nextTask: `M16-GAP-00272`

View File

@@ -0,0 +1,26 @@
# M16-GAP-00272 Status
status: done
task: asset.catalog_undo operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture links one object from external `WebGapCatalogUndo.blend`.
Blender desktop observes the no-catalog-selection boundary as `poll=false`,
records `CANCELLED` for `ASSET_OT_catalog_undo`, and confirms no Main
mutation. Save/reopen preserves the Library record exactly.
- WASM/Main reads the same external Library with stable source path,
`EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator
confirms save/reopen stability and malformed-input rejection without Main
mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made. Blender's expected missing
external-library warning is recorded by the comparator while the Library
state remains exact.
nextTask: `M16-GAP-00273`

View File

@@ -0,0 +1,26 @@
# M16-GAP-00273 Status
status: done
task: asset.catalog_undo_push operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture links one object from external `WebGapCatalogUndoPush.blend`.
Blender desktop observes the no-catalog-selection boundary as `poll=false`,
records `CANCELLED` for `ASSET_OT_catalog_undo_push`, and confirms no Main
mutation. Save/reopen preserves the Library record exactly.
- WASM/Main reads the same external Library with stable source path,
`EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator
confirms save/reopen stability and malformed-input rejection without Main
mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made. Blender's expected missing
external-library warning is recorded by the comparator while the Library
state remains exact.
nextTask: `M16-GAP-00274`

View File

@@ -0,0 +1,26 @@
# M16-GAP-00274 Status
status: done
task: asset.catalogs_save operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture links one object from external `WebGapCatalogsSave.blend`.
Blender desktop observes the no-active-asset-library boundary as `poll=false`,
records `CANCELLED` for `ASSET_OT_catalogs_save`, and confirms no Main
mutation. Save/reopen preserves the Library record exactly.
- WASM/Main reads the same external Library with stable source path,
`EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator
confirms save/reopen stability and malformed-input rejection without Main
mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made. Blender's expected missing
external-library warning is recorded by the comparator while the Library
state remains exact.
nextTask: `M16-GAP-00275`

View File

@@ -0,0 +1,26 @@
# M16-GAP-00275 Status
status: done
task: asset.clear operator LOCAL_EXACT slice
updated: 2026-08-23 America/New_York
scope:
- The fixture links one object from external `WebGapAssetClear.blend`.
Blender desktop observes the no-local-asset boundary as `poll=false`,
records `CANCELLED` for `ASSET_OT_clear`, and confirms no Main mutation.
Save/reopen preserves the Library record exactly.
- WASM/Main reads the same external Library with stable source path,
`EXTERNAL_REQUIRED` status, and an empty dependency closure. The comparator
confirms save/reopen stability and malformed-input rejection without Main
mutation.
evidence:
- Fixture generation, desktop checker, npm comparator, direct comparator, and
task context checks passed with exit code 0. Chromium-only policy was
preserved and no Firefox/WebKit run was made. Blender's expected missing
external-library warning is recorded by the comparator while the Library
state remains exact.
nextTask: `M16-GAP-00276`

View File

@@ -0,0 +1,37 @@
# M16-GAP-00265: operator:asset.assets_download LOCAL_EXACT slice
- task: M16-GAP-00265
- parent: M16-GAP-00264
- status: in_progress
- gap: operator:asset.assets_download
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.assets_download 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.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend`
- Generator: `tools/web/generated/M16-GAP-00265.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00265.py -- tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00265
node tools/web/check-generated-gap.mjs --task M16-GAP-00265
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00265/`
- Status: `docs/status/M16-GAP-00265.md`
- Manifest: `tests/golden/M16-GAP-00265/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00265 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00266: operator:asset.assign_action LOCAL_EXACT slice
- task: M16-GAP-00266
- parent: M16-GAP-00265
- status: in_progress
- gap: operator:asset.assign_action
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.assign_action data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend`
- Generator: `tools/web/generated/M16-GAP-00266.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00266.py -- tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00266
node tools/web/check-generated-gap.mjs --task M16-GAP-00266
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00266/`
- Status: `docs/status/M16-GAP-00266.md`
- Manifest: `tests/golden/M16-GAP-00266/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00266 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00267: operator:asset.browse_containing_blend_file LOCAL_EXACT slice
- task: M16-GAP-00267
- parent: M16-GAP-00266
- status: in_progress
- gap: operator:asset.browse_containing_blend_file
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.browse_containing_blend_file 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.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend`
- Generator: `tools/web/generated/M16-GAP-00267.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00267.py -- tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00267
node tools/web/check-generated-gap.mjs --task M16-GAP-00267
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00267/`
- Status: `docs/status/M16-GAP-00267.md`
- Manifest: `tests/golden/M16-GAP-00267/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00267 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00268: operator:asset.bundle_install LOCAL_EXACT slice
- task: M16-GAP-00268
- parent: M16-GAP-00267
- status: in_progress
- gap: operator:asset.bundle_install
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.bundle_install 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.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend`
- Generator: `tools/web/generated/M16-GAP-00268.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00268.py -- tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00268
node tools/web/check-generated-gap.mjs --task M16-GAP-00268
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00268/`
- Status: `docs/status/M16-GAP-00268.md`
- Manifest: `tests/golden/M16-GAP-00268/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00268 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00269: operator:asset.catalog_delete LOCAL_EXACT slice
- task: M16-GAP-00269
- parent: M16-GAP-00268
- status: in_progress
- gap: operator:asset.catalog_delete
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.catalog_delete data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend`
- Generator: `tools/web/generated/M16-GAP-00269.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00269.py -- tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00269
node tools/web/check-generated-gap.mjs --task M16-GAP-00269
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00269/`
- Status: `docs/status/M16-GAP-00269.md`
- Manifest: `tests/golden/M16-GAP-00269/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00269 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00270: operator:asset.catalog_new LOCAL_EXACT slice
- task: M16-GAP-00270
- parent: M16-GAP-00269
- status: in_progress
- gap: operator:asset.catalog_new
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.catalog_new 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.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend`
- Generator: `tools/web/generated/M16-GAP-00270.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00270.py -- tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00270
node tools/web/check-generated-gap.mjs --task M16-GAP-00270
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00270/`
- Status: `docs/status/M16-GAP-00270.md`
- Manifest: `tests/golden/M16-GAP-00270/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00270 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00271: operator:asset.catalog_redo LOCAL_EXACT slice
- task: M16-GAP-00271
- parent: M16-GAP-00270
- status: in_progress
- gap: operator:asset.catalog_redo
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.catalog_redo 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.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend`
- Generator: `tools/web/generated/M16-GAP-00271.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00271.py -- tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00271
node tools/web/check-generated-gap.mjs --task M16-GAP-00271
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00271/`
- Status: `docs/status/M16-GAP-00271.md`
- Manifest: `tests/golden/M16-GAP-00271/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00271 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00272: operator:asset.catalog_undo LOCAL_EXACT slice
- task: M16-GAP-00272
- parent: M16-GAP-00271
- status: in_progress
- gap: operator:asset.catalog_undo
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.catalog_undo 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.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend`
- Generator: `tools/web/generated/M16-GAP-00272.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00272.py -- tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00272
node tools/web/check-generated-gap.mjs --task M16-GAP-00272
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00272/`
- Status: `docs/status/M16-GAP-00272.md`
- Manifest: `tests/golden/M16-GAP-00272/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00272 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00273: operator:asset.catalog_undo_push LOCAL_EXACT slice
- task: M16-GAP-00273
- parent: M16-GAP-00272
- status: in_progress
- gap: operator:asset.catalog_undo_push
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.catalog_undo_push 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.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend`
- Generator: `tools/web/generated/M16-GAP-00273.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00273.py -- tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00273
node tools/web/check-generated-gap.mjs --task M16-GAP-00273
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00273/`
- Status: `docs/status/M16-GAP-00273.md`
- Manifest: `tests/golden/M16-GAP-00273/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00273 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00274: operator:asset.catalogs_save LOCAL_EXACT slice
- task: M16-GAP-00274
- parent: M16-GAP-00273
- status: in_progress
- gap: operator:asset.catalogs_save
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.catalogs_save data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend`
- Generator: `tools/web/generated/M16-GAP-00274.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00274.py -- tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00274
node tools/web/check-generated-gap.mjs --task M16-GAP-00274
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00274/`
- Status: `docs/status/M16-GAP-00274.md`
- Manifest: `tests/golden/M16-GAP-00274/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00274 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00275: operator:asset.clear LOCAL_EXACT slice
- task: M16-GAP-00275
- parent: M16-GAP-00274
- status: in_progress
- gap: operator:asset.clear
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.clear 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.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend`
- Generator: `tools/web/generated/M16-GAP-00275.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00275.py -- tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00275
node tools/web/check-generated-gap.mjs --task M16-GAP-00275
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00275/`
- Status: `docs/status/M16-GAP-00275.md`
- Manifest: `tests/golden/M16-GAP-00275/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00275 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

View File

@@ -0,0 +1,37 @@
# M16-GAP-00276: operator:asset.clear_single LOCAL_EXACT slice
- task: M16-GAP-00276
- parent: M16-GAP-00275
- status: in_progress
- gap: operator:asset.clear_single
- ownerFamily: OPERATOR
- targetImplementationClass: LOCAL_EXACT
## 目标
Make the same minimal fixture produce observable operator:asset.clear_single 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.
## 输入与范围
- Fixture: `tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend`
- Generator: `tools/web/generated/M16-GAP-00276.py`
- Production: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
- Checker: `tools/web/check-generated-gap.mjs`
- Do: field read, desktop/WASM comparison, save/reopen, structured report.
- Do not: other gaps, Firefox/WebKit, or full editor behavior.
## 验收
build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00276.py -- tests/files/web/generated/M16-GAP-00276-operator-asset.clear_single.blend
npm --prefix web run test:generated-gap -- --task M16-GAP-00276
node tools/web/check-generated-gap.mjs --task M16-GAP-00276
Malformed/unsupported, cancellation, duplicate, over-budget, or hash-drift cases must keep in_progress; they must not change Main revision or advance nextTask.
## 交付与回滚
- Reports: `tests/golden/M16-GAP-00276/`
- Status: `docs/status/M16-GAP-00276.md`
- Manifest: `tests/golden/M16-GAP-00276/manifest.json`
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00276 --write`
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -261,5 +261,17 @@
"operator:armature.split", "operator:armature.split",
"operator:armature.subdivide", "operator:armature.subdivide",
"operator:armature.switch_direction", "operator:armature.switch_direction",
"operator:armature.symmetrize" "operator:armature.symmetrize",
"operator:asset.asset_download",
"operator:asset.assets_download",
"operator:asset.assign_action",
"operator:asset.browse_containing_blend_file",
"operator:asset.bundle_install",
"operator:asset.catalog_delete",
"operator:asset.catalog_new",
"operator:asset.catalog_redo",
"operator:asset.catalog_undo",
"operator:asset.catalog_undo_push",
"operator:asset.catalogs_save",
"operator:asset.clear"
] ]

View File

@@ -12,7 +12,7 @@
}, },
"generator": { "generator": {
"path": "tools/web/generate-blender-next-task-plan.mjs", "path": "tools/web/generate-blender-next-task-plan.mjs",
"sha256": "b944d9e0ee37497d397fac6bede348702768ec2fa84ff2246ef39cc58d4242c0" "sha256": "d9f8bf8f666e5843c5d776d10d8afb772fb9f3e890cb071e249ed1ff000b0e68"
}, },
"checker": { "checker": {
"path": "tools/web/check-blender-next-task-plan.mjs", "path": "tools/web/check-blender-next-task-plan.mjs",
@@ -20,11 +20,11 @@
}, },
"plan": { "plan": {
"path": "tests/golden/M15-03A/next-task-plan.json", "path": "tests/golden/M15-03A/next-task-plan.json",
"sha256": "f10310d6530d8a9adfde0bc6bca35e4bfae7a05169028e1a8b36e374b059c8bb" "sha256": "edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17"
}, },
"report": { "report": {
"path": "tests/golden/M15-03A/next-task-plan-check-report.json", "path": "tests/golden/M15-03A/next-task-plan-check-report.json",
"sha256": "1fede6a6bba0a935ffbdc1aa21ea7ca0addd741139b754c2a27d380eacf5c794" "sha256": "302db2256fec76ee32d5fdc691a9a540333e4a0163aa603b8d843a97f7b6bcc1"
}, },
"package": { "package": {
"path": "web/package.json", "path": "web/package.json",

View File

@@ -5,8 +5,8 @@
"summary": { "summary": {
"taskCount": 6900, "taskCount": 6900,
"active": 1, "active": 1,
"pending": 6636, "pending": 6624,
"completed": 263, "completed": 275,
"blocked": 0, "blocked": 0,
"byWave": { "byWave": {
"M16": 2667, "M16": 2667,
@@ -18,7 +18,7 @@
"M22": 19 "M22": 19
} }
}, },
"firstTask": "M16-GAP-00264", "firstTask": "M16-GAP-00276",
"planSha256": "f10310d6530d8a9adfde0bc6bca35e4bfae7a05169028e1a8b36e374b059c8bb", "planSha256": "edc59e235e492bd5982cea233d75d74a219021c8ee70348ea1e0985ada7f6a17",
"nextTask": "M15-03B" "nextTask": "M15-03B"
} }

View File

@@ -13,14 +13,14 @@
}, },
"completions": { "completions": {
"path": "tests/golden/M15-03A/completed-gap-tasks.json", "path": "tests/golden/M15-03A/completed-gap-tasks.json",
"sha256": "b927d84d995f64669fabdcb50019a7db895d9a6f4e004913122d32c2dfca01ac" "sha256": "32f4c11ebf8563f3aa500583f3979c1b38d711cc7328a428968118f0375b90b4"
} }
}, },
"summary": { "summary": {
"taskCount": 6900, "taskCount": 6900,
"active": 1, "active": 1,
"pending": 6636, "pending": 6624,
"completed": 263, "completed": 275,
"blocked": 0, "blocked": 0,
"byWave": { "byWave": {
"M16": 2667, "M16": 2667,
@@ -6087,7 +6087,7 @@
"gapId": "operator:asset.asset_download", "gapId": "operator:asset.asset_download",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "active", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6110,7 +6110,7 @@
"gapId": "operator:asset.assets_download", "gapId": "operator:asset.assets_download",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6133,7 +6133,7 @@
"gapId": "operator:asset.assign_action", "gapId": "operator:asset.assign_action",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6156,7 +6156,7 @@
"gapId": "operator:asset.browse_containing_blend_file", "gapId": "operator:asset.browse_containing_blend_file",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6179,7 +6179,7 @@
"gapId": "operator:asset.bundle_install", "gapId": "operator:asset.bundle_install",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6202,7 +6202,7 @@
"gapId": "operator:asset.catalog_delete", "gapId": "operator:asset.catalog_delete",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6225,7 +6225,7 @@
"gapId": "operator:asset.catalog_new", "gapId": "operator:asset.catalog_new",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6248,7 +6248,7 @@
"gapId": "operator:asset.catalog_redo", "gapId": "operator:asset.catalog_redo",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6271,7 +6271,7 @@
"gapId": "operator:asset.catalog_undo", "gapId": "operator:asset.catalog_undo",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6294,7 +6294,7 @@
"gapId": "operator:asset.catalog_undo_push", "gapId": "operator:asset.catalog_undo_push",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6317,7 +6317,7 @@
"gapId": "operator:asset.catalogs_save", "gapId": "operator:asset.catalogs_save",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6340,7 +6340,7 @@
"gapId": "operator:asset.clear", "gapId": "operator:asset.clear",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "completed",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -6363,7 +6363,7 @@
"gapId": "operator:asset.clear_single", "gapId": "operator:asset.clear_single",
"ownerFamily": "OPERATOR", "ownerFamily": "OPERATOR",
"sourceTask": "M15-01B", "sourceTask": "M15-01B",
"state": "pending", "state": "active",
"dependencies": [], "dependencies": [],
"targetImplementationClass": "LOCAL_EXACT", "targetImplementationClass": "LOCAL_EXACT",
"fixture": { "fixture": {
@@ -158734,7 +158734,7 @@
] ]
} }
], ],
"firstTask": "M16-GAP-00264", "firstTask": "M16-GAP-00276",
"closureGate": "M15-03E", "closureGate": "M15-03E",
"nextTask": "M15-03B" "nextTask": "M15-03B"
} }

View File

@@ -261,19 +261,19 @@
{"id":"M16-GAP-00261","gapId":"operator:armature.subdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00261","gapId":"operator:armature.subdivide","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00262","gapId":"operator:armature.switch_direction","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00262","gapId":"operator:armature.switch_direction","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00263","gapId":"operator:armature.symmetrize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00263","gapId":"operator:armature.symmetrize","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00264","gapId":"operator:asset.asset_download","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"active","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00264","gapId":"operator:asset.asset_download","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00265","gapId":"operator:asset.assets_download","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00265","gapId":"operator:asset.assets_download","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00266","gapId":"operator:asset.assign_action","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00266","gapId":"operator:asset.assign_action","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00267","gapId":"operator:asset.browse_containing_blend_file","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00267","gapId":"operator:asset.browse_containing_blend_file","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00268","gapId":"operator:asset.bundle_install","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00268","gapId":"operator:asset.bundle_install","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00269","gapId":"operator:asset.catalog_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00269","gapId":"operator:asset.catalog_delete","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00270","gapId":"operator:asset.catalog_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00270","gapId":"operator:asset.catalog_new","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00271","gapId":"operator:asset.catalog_redo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00271","gapId":"operator:asset.catalog_redo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00272","gapId":"operator:asset.catalog_undo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00272","gapId":"operator:asset.catalog_undo","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00273","gapId":"operator:asset.catalog_undo_push","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00273","gapId":"operator:asset.catalog_undo_push","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00274","gapId":"operator:asset.catalogs_save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00274","gapId":"operator:asset.catalogs_save","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00275","gapId":"operator:asset.clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00275","gapId":"operator:asset.clear","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"completed","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00276","gapId":"operator:asset.clear_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00276","gapId":"operator:asset.clear_single","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"active","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00277","gapId":"operator:asset.library_refresh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00277","gapId":"operator:asset.library_refresh","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00278","gapId":"operator:asset.library_reload_listing","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00278","gapId":"operator:asset.library_reload_listing","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"}
{"id":"M16-GAP-00279","gapId":"operator:asset.mark","ownerFamily":"OPERATOR","sourceTask":"M15-01B","state":"pending","targetImplementationClass":"LOCAL_EXACT"} {"id":"M16-GAP-00279","gapId":"operator:asset.mark","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,32 @@
{
"after": {
"filepath": "//assets/WebGapAssetDownload.png",
"name": "WebGapAssetDownloadImage",
"packed": false,
"size": [
1,
1
],
"source": "FILE"
},
"before": {
"filepath": "//assets/WebGapAssetDownload.png",
"name": "WebGapAssetDownloadImage",
"packed": false,
"size": [
1,
1
],
"source": "FILE"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend",
"fixtureSha256": "79332080394950857a3b99087140aba51df6ad2fd731e314af67c473a48602b4",
"mainMutation": "NONE",
"operation": "ASSET_ASSET_DOWNLOAD_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": true,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00264"
}

View File

@@ -0,0 +1,32 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00264",
"operation": "ASSET_ASSET_DOWNLOAD_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend",
"sha256": "79332080394950857a3b99087140aba51df6ad2fd731e314af67c473a48602b4"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00264/asset-download-desktop-report.json",
"poll": true,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"imageId": "image:WebGapAssetDownloadImage",
"sourcePath": "//assets/WebGapAssetDownload.png",
"assetStatus": "EXTERNAL",
"packed": false,
"dimensions": [
1,
1
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00265"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00264",
"parentTask": "M16-GAP-00263",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_ASSET_DOWNLOAD_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00263/manifest.json", "sha256": "174eb122a99cd96c634a78e9689dcc1e0317f17bd52727e782a20599ba6b730b"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend", "sha256": "79332080394950857a3b99087140aba51df6ad2fd731e314af67c473a48602b4"},
"generator": {"path": "tools/web/generated/M16-GAP-00264.py", "sha256": "e7fd141d87414ee12669a83dbfe54ef47b557a9c517ba8ec164264882c80e8bd"},
"desktopChecker": {"path": "tools/web/check-action-asset-download-desktop.py", "sha256": "c8af3ac7b0fd53e955a9c5d925e0ea004f219ef9c5b6629fdb57e6fecdba55a6"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "9429c88eb60c403ecd9e7f69ce024eb03667a0bf9243f0b31c0cb3fadc9c97ad"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00264/asset-download-desktop-report.json", "sha256": "399aed90c3b236f1c169fad88dbc92f5409d26ca35bdeb5768bb9272a50a7157"},
"webReport": {"path": "tests/golden/M16-GAP-00264/asset-download-local-exact-report.json", "sha256": "ad88b3a8b18007bf61d4351185ee2cab8c09e9e3a74958d521f94ff1a221795c"},
"status": {"path": "docs/status/M16-GAP-00264.md", "sha256": "57cdac22f8e6e6bb5e233b4568e9d06885869341fac96ec5bd8e717f040edcac"},
"taskContext": {"path": "tests/golden/M16-GAP-00264/task-context.json", "sha256": "d22c02c55e889b252ab0e11580693c6fc44225d4d650591942bee294557f4134"}
},
"nextTask": "M16-GAP-00265"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00264",
"parentTask": "M16-GAP-00263",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.asset_download 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:asset.asset_download",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00264.py -- tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00264",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00264"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00264.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 2123,
"contextRemainingTokens": 529
},
"source": {
"bytes": 7781,
"tokens": 1947
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00264.py",
"bytes": 738,
"tokens": 185
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00264-operator-asset.asset_download.blend",
"bytes": 85874,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 788450,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00264/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00264.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00264/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 738,
"tokens": 185
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00265",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00264.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00263/manifest.json",
"parentStatus": "docs/status/M16-GAP-00263.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00264.md",
"tests/golden/M16-GAP-00263/manifest.json",
"docs/status/M16-GAP-00263.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-00263",
"parentTask": "M16-GAP-00262",
"status": "done",
"nextTask": "M16-GAP-00264",
"artifactCount": 15
},
"statusSummary": [
"# M16-GAP-00263 Status",
"status: done",
"task: armature.symmetrize operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture contains one selected positive-X `WebGapArmatureSymmetrizeSource.L`",
" bone and one unrelated unselected bone. Blender desktop runs",
" `ARMATURE_OT_symmetrize(direction=\"NEGATIVE_X\")`, producing the mirrored"
]
},
"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": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00264.md",
"bytes": 1789,
"lines": 38,
"tokens": 448
},
{
"path": "tests/golden/M16-GAP-00263/manifest.json",
"bytes": 2667,
"lines": 29,
"tokens": 667
},
{
"path": "docs/status/M16-GAP-00263.md",
"bytes": 830,
"lines": 25,
"tokens": 208
}
],
"sourceTokens": 1947,
"evidenceFiles": 1,
"evidenceBytes": 738,
"evidenceTokens": 185,
"totalTokens": 2132,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3156,
"serializedContextTokens": 753,
"withinBudget": true
}
}

View File

@@ -0,0 +1,32 @@
{
"after": {
"filepath": "//assets/WebGapAssetsDownload.png",
"name": "WebGapAssetsDownloadImage",
"packed": false,
"size": [
1,
1
],
"source": "FILE"
},
"before": {
"filepath": "//assets/WebGapAssetsDownload.png",
"name": "WebGapAssetsDownloadImage",
"packed": false,
"size": [
1,
1
],
"source": "FILE"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend",
"fixtureSha256": "d2c09f34febbef1db3de830c37c33c1f7de8d6fc7ea1ef2aaf9eed7de243bb27",
"mainMutation": "NONE",
"operation": "ASSET_ASSETS_DOWNLOAD_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00265"
}

View File

@@ -0,0 +1,32 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00265",
"operation": "ASSET_ASSETS_DOWNLOAD_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend",
"sha256": "d2c09f34febbef1db3de830c37c33c1f7de8d6fc7ea1ef2aaf9eed7de243bb27"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00265/assets-download-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"imageId": "image:WebGapAssetsDownloadImage",
"sourcePath": "//assets/WebGapAssetsDownload.png",
"assetStatus": "EXTERNAL",
"packed": false,
"dimensions": [
1,
1
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00266"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00265",
"parentTask": "M16-GAP-00264",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_ASSETS_DOWNLOAD_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00264/manifest.json", "sha256": "227db04b1571e0ae7eb9c698b1b2d440118da166a525f3114d212825e9ebd67b"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend", "sha256": "d2c09f34febbef1db3de830c37c33c1f7de8d6fc7ea1ef2aaf9eed7de243bb27"},
"generator": {"path": "tools/web/generated/M16-GAP-00265.py", "sha256": "1a86706f3c011d4a0f0b443bb6db3500704b898f0b42af5795ed2ee94b6c4286"},
"desktopChecker": {"path": "tools/web/check-action-assets-download-desktop.py", "sha256": "512737cde0efa6cc6a669939c243e7b609cc7c37fc223c4923cc6a9adc035318"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b4c76eefccf111de9b184220aacacd892221089eca5c857683efb8d2fee1a050"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00265/assets-download-desktop-report.json", "sha256": "1ce5009ec4582730437cbefbb5722699bc6d2fe0824eede52bf8de98b85ccb24"},
"webReport": {"path": "tests/golden/M16-GAP-00265/assets-download-local-exact-report.json", "sha256": "35d1005b88bb477b0bc686297d4e178fbdf1c3feeb7fb29bb443a019d7a34b4d"},
"status": {"path": "docs/status/M16-GAP-00265.md", "sha256": "377f5180ae25d3912237ca1b3283f0a5f9d5292fe28952515918ec22467f8d9f"},
"taskContext": {"path": "tests/golden/M16-GAP-00265/task-context.json", "sha256": "d9b040e30c2443cfb11dc196dbb042b1aa6a72a3a27b599ccdc591a98e340395"}
},
"nextTask": "M16-GAP-00266"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00265",
"parentTask": "M16-GAP-00264",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.assets_download 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:asset.assets_download",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00265.py -- tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00265",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00265"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00265.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1972,
"contextRemainingTokens": 491
},
"source": {
"bytes": 7932,
"tokens": 1985
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00265.py",
"bytes": 740,
"tokens": 185
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00265-operator-asset.assets_download.blend",
"bytes": 85879,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 791968,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00265/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00265.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00265/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 740,
"tokens": 185
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00266",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00265.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00264/manifest.json",
"parentStatus": "docs/status/M16-GAP-00264.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00265.md",
"tests/golden/M16-GAP-00264/manifest.json",
"docs/status/M16-GAP-00264.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-00264",
"parentTask": "M16-GAP-00263",
"status": "done",
"nextTask": "M16-GAP-00265",
"artifactCount": 15
},
"statusSummary": [
"# M16-GAP-00264 Status",
"status: done",
"task: asset.asset_download operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture contains one fake-user external Image with source path",
" `//assets/WebGapAssetDownload.png`. Blender desktop enables online access for",
" the isolated check, runs `ASSET_OT_asset_download` for a missing remote"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1794,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 449
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00265.md",
"bytes": 1794,
"lines": 38,
"tokens": 449
},
{
"path": "tests/golden/M16-GAP-00264/manifest.json",
"bytes": 2654,
"lines": 29,
"tokens": 664
},
{
"path": "docs/status/M16-GAP-00264.md",
"bytes": 989,
"lines": 26,
"tokens": 248
}
],
"sourceTokens": 1985,
"evidenceFiles": 1,
"evidenceBytes": 740,
"evidenceTokens": 185,
"totalTokens": 2170,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3194,
"serializedContextTokens": 754,
"withinBudget": true
}
}

View File

@@ -0,0 +1,38 @@
{
"after": {
"channels": [
{
"frames": [
1.0,
5.0
],
"index": 0,
"path": "location"
}
],
"name": "WebGapAssignAction"
},
"before": {
"channels": [
{
"frames": [
1.0,
5.0
],
"index": 0,
"path": "location"
}
],
"name": "WebGapAssignAction"
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend",
"fixtureSha256": "6cefa4e22e0e8d5b2482cbe62c36e10cc58f51fa94fe843e6b953c438479fa98",
"mainMutation": "NONE",
"operation": "ASSET_ASSIGN_ACTION_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00266"
}

View File

@@ -0,0 +1,32 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00266",
"operation": "ASSET_ASSIGN_ACTION_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend",
"sha256": "6cefa4e22e0e8d5b2482cbe62c36e10cc58f51fa94fe843e6b953c438479fa98"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00266/assign-action-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"actionId": "action:WebGapAssignAction:object:WebGapAssignActionObject",
"targetId": "object:WebGapAssignActionObject",
"channelPaths": [
"location[0]"
],
"keyframesPerChannel": [
2
]
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00267"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00266",
"parentTask": "M16-GAP-00265",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_ASSIGN_ACTION_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00265/manifest.json", "sha256": "9d3a041a635b7d0413797d7fb5bb60914a28ab43415517081b3d9f2ebf644b2d"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend", "sha256": "6cefa4e22e0e8d5b2482cbe62c36e10cc58f51fa94fe843e6b953c438479fa98"},
"generator": {"path": "tools/web/generated/M16-GAP-00266.py", "sha256": "e299bf65f70bc4eb08204f42894c961d0a7c2c69bfab5e4a26ed8924f52a6271"},
"desktopChecker": {"path": "tools/web/check-action-assign-action-desktop.py", "sha256": "b4ffdc3bd9120c2823fdcf29278695e49c21b3ee07345daa15712ef6d57ca6ec"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "ed8ec2e2f69cbba7a92ab91e6d4a0dad5b53a61fe280719e2a44c78e0a2ae1e3"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00266/assign-action-desktop-report.json", "sha256": "aacd8ad7641a390a2f2b4990d4b324bb9478ee0a45a42c9bf4e52720038dfab4"},
"webReport": {"path": "tests/golden/M16-GAP-00266/assign-action-local-exact-report.json", "sha256": "e2376fd259124a1d90db2ded522f1231df3d12d0f5eb3d82c229e95fc680f1dc"},
"status": {"path": "docs/status/M16-GAP-00266.md", "sha256": "5173d19e5d61195f3a6b4688d607274a099e47b5c2bcbc39d0ed1d6ad5caaccb"},
"taskContext": {"path": "tests/golden/M16-GAP-00266/task-context.json", "sha256": "167bfdff69ccc7568d7c20d4c61be173604255e1a9cd698e55df690444763dfb"}
},
"nextTask": "M16-GAP-00267"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00266",
"parentTask": "M16-GAP-00265",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.assign_action data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:asset.assign_action",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00266.py -- tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00266",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00266"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00266.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 2018,
"contextRemainingTokens": 504
},
"source": {
"bytes": 7886,
"tokens": 1972
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00266.py",
"bytes": 1014,
"tokens": 254
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00266-operator-asset.assign_action.blend",
"bytes": 86324,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 795556,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00266/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00266.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00266/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1014,
"tokens": 254
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00267",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00266.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00265/manifest.json",
"parentStatus": "docs/status/M16-GAP-00265.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00266.md",
"tests/golden/M16-GAP-00265/manifest.json",
"docs/status/M16-GAP-00265.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-00265",
"parentTask": "M16-GAP-00264",
"status": "done",
"nextTask": "M16-GAP-00266",
"artifactCount": 15
},
"statusSummary": [
"# M16-GAP-00265 Status",
"status: done",
"task: asset.assets_download operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture contains one fake-user external Image with source path",
" `//assets/WebGapAssetsDownload.png`. Blender desktop enables online access,",
" confirms `ASSET_OT_assets_download.poll()` is false, and records the real"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1784,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 446
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00266.md",
"bytes": 1784,
"lines": 38,
"tokens": 446
},
{
"path": "tests/golden/M16-GAP-00265/manifest.json",
"bytes": 2659,
"lines": 29,
"tokens": 665
},
{
"path": "docs/status/M16-GAP-00265.md",
"bytes": 948,
"lines": 26,
"tokens": 237
}
],
"sourceTokens": 1972,
"evidenceFiles": 1,
"evidenceBytes": 1014,
"evidenceTokens": 254,
"totalTokens": 2226,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3250,
"serializedContextTokens": 753,
"withinBudget": true
}
}

View File

@@ -0,0 +1,22 @@
{
"after": {
"filepath": "//WebGapBrowseContaining.blend",
"name": "WebGapBrowseContaining.blend",
"packed": false
},
"before": {
"filepath": "//WebGapBrowseContaining.blend",
"name": "WebGapBrowseContaining.blend",
"packed": false
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend",
"fixtureSha256": "29e5e42f3ebe458a4ded1d1a7a0a1cd0fecb50867b193ee3ec98485df36e7d61",
"mainMutation": "NONE",
"operation": "ASSET_BROWSE_CONTAINING_BLEND_FILE_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00267"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00267",
"operation": "ASSET_BROWSE_CONTAINING_BLEND_FILE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend",
"sha256": "29e5e42f3ebe458a4ded1d1a7a0a1cd0fecb50867b193ee3ec98485df36e7d61"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00267/browse-containing-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"libraryId": "library:WebGapBrowseContaining.blend",
"sourcePath": "//WebGapBrowseContaining.blend",
"libraryStatus": "EXTERNAL_REQUIRED",
"dependencyIds": []
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00268"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00267",
"parentTask": "M16-GAP-00266",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_BROWSE_CONTAINING_BLEND_FILE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00266/manifest.json", "sha256": "aacbc7e4bfad12e03e8ba46dddef7d0c72d0511e8df0e158ef0005d4bb20dcf0"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend", "sha256": "29e5e42f3ebe458a4ded1d1a7a0a1cd0fecb50867b193ee3ec98485df36e7d61"},
"librarySource": {"path": "tests/files/web/generated/WebGapBrowseContaining.blend", "sha256": "661f398dd346bc18484308b154845ca5d7d82af9e9e367767c2c1ef20f3fd369"},
"generator": {"path": "tools/web/generated/M16-GAP-00267.py", "sha256": "bc950bc190d2e9c607a6d41cfc448977fe478b98723640287f63f4f42fcd2052"},
"desktopChecker": {"path": "tools/web/check-action-browse-containing-blend-file-desktop.py", "sha256": "05b68021e96e9b480298ddb2bd5c814ecf919a622d57ceabac7534eec31aad90"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "d6528398cf1ca5e8047df546715829963bca689c367c1374e10d8ee137cce232"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00267/browse-containing-desktop-report.json", "sha256": "cad41d8dfb33770fdbd87f44d2eb04b070cdb120665a188a379c0436fc25f324"},
"webReport": {"path": "tests/golden/M16-GAP-00267/browse-containing-local-exact-report.json", "sha256": "2c522d5b6c545f7bf8d7238d881a94c2d6463abcb41bf24989b3218962a51ac1"},
"status": {"path": "docs/status/M16-GAP-00267.md", "sha256": "2784e307c2f4747a99dfecea527d413b5aea42c640cb2e5f0e5d3636619a8874"},
"taskContext": {"path": "tests/golden/M16-GAP-00267/task-context.json", "sha256": "47039236bfbb8d1e2d130708d25ead95b54027b1b061d91ae73f686ed75660b0"}
},
"nextTask": "M16-GAP-00268"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00267",
"parentTask": "M16-GAP-00266",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.browse_containing_blend_file 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:asset.browse_containing_blend_file",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00267.py -- tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00267",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00267"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00267.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1945,
"contextRemainingTokens": 485
},
"source": {
"bytes": 7959,
"tokens": 1991
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00267.py",
"bytes": 1602,
"tokens": 401
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00267-operator-asset.browse_containing_blend_file.blend",
"bytes": 85938,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 799287,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00267/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00267.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00267/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1602,
"tokens": 401
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00268",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00267.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00266/manifest.json",
"parentStatus": "docs/status/M16-GAP-00266.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00267.md",
"tests/golden/M16-GAP-00266/manifest.json",
"docs/status/M16-GAP-00266.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-00266",
"parentTask": "M16-GAP-00265",
"status": "done",
"nextTask": "M16-GAP-00267",
"artifactCount": 15
},
"statusSummary": [
"# M16-GAP-00266 Status",
"status: done",
"task: asset.assign_action operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture contains one fake-user `WebGapAssignAction` with a two-key",
" `location[0]` channel assigned to `WebGapAssignActionObject`. Blender",
" desktop observes the no-Asset-Shelf context as `poll=false`, records the"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1859,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 465
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00267.md",
"bytes": 1859,
"lines": 38,
"tokens": 465
},
{
"path": "tests/golden/M16-GAP-00266/manifest.json",
"bytes": 2649,
"lines": 29,
"tokens": 663
},
{
"path": "docs/status/M16-GAP-00266.md",
"bytes": 956,
"lines": 25,
"tokens": 239
}
],
"sourceTokens": 1991,
"evidenceFiles": 1,
"evidenceBytes": 1602,
"evidenceTokens": 401,
"totalTokens": 2392,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3416,
"serializedContextTokens": 765,
"withinBudget": true
}
}

View File

@@ -0,0 +1,22 @@
{
"after": {
"filepath": "//WebGapBundleInstall.blend",
"name": "WebGapBundleInstall.blend",
"packed": false
},
"before": {
"filepath": "//WebGapBundleInstall.blend",
"name": "WebGapBundleInstall.blend",
"packed": false
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend",
"fixtureSha256": "64dd97ac23f70c83261635fc2337555b62818b92ffedee60cb13f3335851a994",
"mainMutation": "NONE",
"operation": "ASSET_BUNDLE_INSTALL_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00268"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00268",
"operation": "ASSET_BUNDLE_INSTALL_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend",
"sha256": "64dd97ac23f70c83261635fc2337555b62818b92ffedee60cb13f3335851a994"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00268/bundle-install-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"libraryId": "library:WebGapBundleInstall.blend",
"sourcePath": "//WebGapBundleInstall.blend",
"libraryStatus": "EXTERNAL_REQUIRED",
"dependencyIds": []
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00269"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00268",
"parentTask": "M16-GAP-00267",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_BUNDLE_INSTALL_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00267/manifest.json", "sha256": "918b5e13ec9e92186ec74f2c49aef4602dee002a92a7c1303ce0c86ef5d5370d"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend", "sha256": "64dd97ac23f70c83261635fc2337555b62818b92ffedee60cb13f3335851a994"},
"librarySource": {"path": "tests/files/web/generated/WebGapBundleInstall.blend", "sha256": "89537577e6e5939da73f37fb22d40ec336a30e7ad491043b4054b0b14e4418fe"},
"generator": {"path": "tools/web/generated/M16-GAP-00268.py", "sha256": "4b9ab994369328b54f630882410066f5ef04980108a692d686430b8331454b6c"},
"desktopChecker": {"path": "tools/web/check-action-bundle-install-desktop.py", "sha256": "a34f4c2095c0ea2d47837f5d631d8dea6a19a70a620982333ddc9abd0a227099"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "b0abffb689387f6ee753292f6592c81b307e71e392760b1277529d9d176fd7ad"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00268/bundle-install-desktop-report.json", "sha256": "088fbc1390ae171dc219c201f09519f8c0fc460bc61138d13d189e3e6ec6d1c0"},
"webReport": {"path": "tests/golden/M16-GAP-00268/bundle-install-local-exact-report.json", "sha256": "be82a7849a167cebed509f7ac451f3c1c1756757afe34e940453df686b507d97"},
"status": {"path": "docs/status/M16-GAP-00268.md", "sha256": "7556cb0df348aca6d83dadc3d155e5ab9d9403e1e470f765acebcaa851a7d058"},
"taskContext": {"path": "tests/golden/M16-GAP-00268/task-context.json", "sha256": "e44a443c29beab5923dbbab2a7e8e8e830654873f8d093345b24c3cd758620ad"}
},
"nextTask": "M16-GAP-00269"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00268",
"parentTask": "M16-GAP-00267",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.bundle_install 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:asset.bundle_install",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00268.py -- tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00268",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00268"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00268.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1701,
"contextRemainingTokens": 423
},
"source": {
"bytes": 8203,
"tokens": 2053
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00268.py",
"bytes": 1587,
"tokens": 397
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00268-operator-asset.bundle_install.blend",
"bytes": 85884,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 802967,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00268/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00268.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00268/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1587,
"tokens": 397
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00269",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00268.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00267/manifest.json",
"parentStatus": "docs/status/M16-GAP-00267.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00268.md",
"tests/golden/M16-GAP-00267/manifest.json",
"docs/status/M16-GAP-00267.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-00267",
"parentTask": "M16-GAP-00266",
"status": "done",
"nextTask": "M16-GAP-00268",
"artifactCount": 16
},
"statusSummary": [
"# M16-GAP-00267 Status",
"status: done",
"task: asset.browse_containing_blend_file operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture links one object from external `WebGapBrowseContaining.blend`.",
" Blender desktop observes the no-selected-asset boundary as `poll=false`,",
" records `CANCELLED` for `ASSET_OT_browse_containing_blend_file`, and confirms"
]
},
"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": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00268.md",
"bytes": 1789,
"lines": 38,
"tokens": 448
},
{
"path": "tests/golden/M16-GAP-00267/manifest.json",
"bytes": 2869,
"lines": 30,
"tokens": 718
},
{
"path": "docs/status/M16-GAP-00267.md",
"bytes": 1050,
"lines": 27,
"tokens": 263
}
],
"sourceTokens": 2053,
"evidenceFiles": 1,
"evidenceBytes": 1587,
"evidenceTokens": 397,
"totalTokens": 2450,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3474,
"serializedContextTokens": 754,
"withinBudget": true
}
}

View File

@@ -0,0 +1,22 @@
{
"after": {
"filepath": "//WebGapCatalogDelete.blend",
"name": "WebGapCatalogDelete.blend",
"packed": false
},
"before": {
"filepath": "//WebGapCatalogDelete.blend",
"name": "WebGapCatalogDelete.blend",
"packed": false
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend",
"fixtureSha256": "7fa8ebaf85c2bd474dcaa9e4ce94ad81665b501841d15c48e371bb8f033702a2",
"mainMutation": "NONE",
"operation": "ASSET_CATALOG_DELETE_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00269"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00269",
"operation": "ASSET_CATALOG_DELETE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend",
"sha256": "7fa8ebaf85c2bd474dcaa9e4ce94ad81665b501841d15c48e371bb8f033702a2"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"libraryId": "library:WebGapCatalogDelete.blend",
"sourcePath": "//WebGapCatalogDelete.blend",
"libraryStatus": "EXTERNAL_REQUIRED",
"dependencyIds": []
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00270"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00269",
"parentTask": "M16-GAP-00268",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_CATALOG_DELETE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00268/manifest.json", "sha256": "8926cead64df23f2bf6386ac728fb8836bcef5c5bd645faecad45a3eb7b06b03"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend", "sha256": "7fa8ebaf85c2bd474dcaa9e4ce94ad81665b501841d15c48e371bb8f033702a2"},
"librarySource": {"path": "tests/files/web/generated/WebGapCatalogDelete.blend", "sha256": "137a558e0ac46a6b9c466b1023a871adb6666ec0de0f9756e041ce8858ed374d"},
"generator": {"path": "tools/web/generated/M16-GAP-00269.py", "sha256": "2be254c3d36647b1d6dfb06af054ab96a0def10666f911bedc3a4225206ff749"},
"desktopChecker": {"path": "tools/web/check-action-catalog-delete-desktop.py", "sha256": "d0347a61c6a0388062e0f9cdaa6c9a25fc3662c667b6641705543ac816e0a355"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "789d04ba83d2119aec7f5d2531acbb8c5aef946e520df9e5e9aa7b415bb2e677"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00269/catalog-delete-desktop-report.json", "sha256": "68070e257397148441c11e1ecfc9a2202f9955cee17a3f8ee878d4e0f1310790"},
"webReport": {"path": "tests/golden/M16-GAP-00269/catalog-delete-local-exact-report.json", "sha256": "1cd38bfab4ba20d3238bbb11fc9838b5479f96c345c6f98e479eea25fe229bd1"},
"status": {"path": "docs/status/M16-GAP-00269.md", "sha256": "6c65ae2c6884a89c9051b13d5336cb9e8c454ccb8e9ed8d80e84b09ef84db0c7"},
"taskContext": {"path": "tests/golden/M16-GAP-00269/task-context.json", "sha256": "e1bb2480ec7894a2ce1b8c5ae2b221f6e55cf19c7c4e72aef04d89d5da147878"}
},
"nextTask": "M16-GAP-00270"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00269",
"parentTask": "M16-GAP-00268",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.catalog_delete data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:asset.catalog_delete",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00269.py -- tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00269",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00269"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00269.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1792,
"contextRemainingTokens": 446
},
"source": {
"bytes": 8112,
"tokens": 2030
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00269.py",
"bytes": 1536,
"tokens": 384
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00269-operator-asset.catalog_delete.blend",
"bytes": 85903,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 806647,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00269/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00269.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00269/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1536,
"tokens": 384
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00270",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00269.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00268/manifest.json",
"parentStatus": "docs/status/M16-GAP-00268.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00269.md",
"tests/golden/M16-GAP-00268/manifest.json",
"docs/status/M16-GAP-00268.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-00268",
"parentTask": "M16-GAP-00267",
"status": "done",
"nextTask": "M16-GAP-00269",
"artifactCount": 16
},
"statusSummary": [
"# M16-GAP-00268 Status",
"status: done",
"task: asset.bundle_install operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture links one object from external `WebGapBundleInstall.blend`.",
" Blender desktop observes the no-bundle context as `poll=false`, records",
" `CANCELLED` for `ASSET_OT_bundle_install`, and confirms no Main mutation."
]
},
"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": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00269.md",
"bytes": 1789,
"lines": 38,
"tokens": 448
},
{
"path": "tests/golden/M16-GAP-00268/manifest.json",
"bytes": 2818,
"lines": 30,
"tokens": 705
},
{
"path": "docs/status/M16-GAP-00268.md",
"bytes": 1010,
"lines": 27,
"tokens": 253
}
],
"sourceTokens": 2030,
"evidenceFiles": 1,
"evidenceBytes": 1536,
"evidenceTokens": 384,
"totalTokens": 2414,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3438,
"serializedContextTokens": 754,
"withinBudget": true
}
}

View File

@@ -0,0 +1,22 @@
{
"after": {
"filepath": "//WebGapCatalogNew.blend",
"name": "WebGapCatalogNew.blend",
"packed": false
},
"before": {
"filepath": "//WebGapCatalogNew.blend",
"name": "WebGapCatalogNew.blend",
"packed": false
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend",
"fixtureSha256": "8c874d8ec51cb7cbfa787780ca7c8e636ce9a98b4998ef81ddbd9fdd34658662",
"mainMutation": "NONE",
"operation": "ASSET_CATALOG_NEW_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00270"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00270",
"operation": "ASSET_CATALOG_NEW_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend",
"sha256": "8c874d8ec51cb7cbfa787780ca7c8e636ce9a98b4998ef81ddbd9fdd34658662"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00270/catalog-new-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"libraryId": "library:WebGapCatalogNew.blend",
"sourcePath": "//WebGapCatalogNew.blend",
"libraryStatus": "EXTERNAL_REQUIRED",
"dependencyIds": []
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00271"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00270",
"parentTask": "M16-GAP-00269",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_CATALOG_NEW_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00269/manifest.json", "sha256": "d197196e37e5f26f13db0f03c099287fe444ebe64688bb60d6ce38e1803559fb"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend", "sha256": "8c874d8ec51cb7cbfa787780ca7c8e636ce9a98b4998ef81ddbd9fdd34658662"},
"librarySource": {"path": "tests/files/web/generated/WebGapCatalogNew.blend", "sha256": "a12a6480d7254d290d0617e16f72c93ef4cbd043ebc004f94559436988a66ef2"},
"generator": {"path": "tools/web/generated/M16-GAP-00270.py", "sha256": "ccaa0c91694f931c0fb6313695b8bb5eae795e8003d24ff67f0eb21328184727"},
"desktopChecker": {"path": "tools/web/check-action-catalog-new-desktop.py", "sha256": "1a5331f11bf741efb897f4c719ea4ff2457e15823c10ca805085d63e059984c1"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "4794b5e0c54f1496b963a912f9c44306277754ee702d6468d6e42c5084f04bac"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00270/catalog-new-desktop-report.json", "sha256": "a8037c3b339c215db7bc4143ce0999074a366019a8868516baec00086378e2d9"},
"webReport": {"path": "tests/golden/M16-GAP-00270/catalog-new-local-exact-report.json", "sha256": "99f10be076dd573ee658256e2b2e08c40af1997b344268a84cdc0fa8fe939e81"},
"status": {"path": "docs/status/M16-GAP-00270.md", "sha256": "293a56ae16f499b98784f05b12d1ef0ec4e9a844763ac1515b1c11d7f26fdcd9"},
"taskContext": {"path": "tests/golden/M16-GAP-00270/task-context.json", "sha256": "ee463f5baf378f77c68c9f30d5f21caebcd027138222b5bf4007a5e14696ff56"}
},
"nextTask": "M16-GAP-00271"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00270",
"parentTask": "M16-GAP-00269",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.catalog_new 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:asset.catalog_new",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00270.py -- tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00270",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00270"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00270.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1795,
"contextRemainingTokens": 447
},
"source": {
"bytes": 8109,
"tokens": 2029
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00270.py",
"bytes": 1425,
"tokens": 357
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00270-operator-asset.catalog_new.blend",
"bytes": 85912,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 810309,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00270/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00270.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00270/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1425,
"tokens": 357
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00271",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00270.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00269/manifest.json",
"parentStatus": "docs/status/M16-GAP-00269.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00270.md",
"tests/golden/M16-GAP-00269/manifest.json",
"docs/status/M16-GAP-00269.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-00269",
"parentTask": "M16-GAP-00268",
"status": "done",
"nextTask": "M16-GAP-00270",
"artifactCount": 16
},
"statusSummary": [
"# M16-GAP-00269 Status",
"status: done",
"task: asset.catalog_delete operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture links one object from external `WebGapCatalogDelete.blend`.",
" Blender desktop observes the no-catalog-selection boundary as `poll=false`,",
" records `CANCELLED` for `ASSET_OT_catalog_delete`, and confirms no Main"
]
},
"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": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00270.md",
"bytes": 1774,
"lines": 38,
"tokens": 444
},
{
"path": "tests/golden/M16-GAP-00269/manifest.json",
"bytes": 2818,
"lines": 30,
"tokens": 705
},
{
"path": "docs/status/M16-GAP-00269.md",
"bytes": 1022,
"lines": 27,
"tokens": 256
}
],
"sourceTokens": 2029,
"evidenceFiles": 1,
"evidenceBytes": 1425,
"evidenceTokens": 357,
"totalTokens": 2386,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3410,
"serializedContextTokens": 752,
"withinBudget": true
}
}

View File

@@ -0,0 +1,22 @@
{
"after": {
"filepath": "//WebGapCatalogRedo.blend",
"name": "WebGapCatalogRedo.blend",
"packed": false
},
"before": {
"filepath": "//WebGapCatalogRedo.blend",
"name": "WebGapCatalogRedo.blend",
"packed": false
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend",
"fixtureSha256": "2e3481a9f155900774bbcc3e5d07ca65bedc2029e3281e86857fd943e81396cd",
"mainMutation": "NONE",
"operation": "ASSET_CATALOG_REDO_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00271"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00271",
"operation": "ASSET_CATALOG_REDO_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend",
"sha256": "2e3481a9f155900774bbcc3e5d07ca65bedc2029e3281e86857fd943e81396cd"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"libraryId": "library:WebGapCatalogRedo.blend",
"sourcePath": "//WebGapCatalogRedo.blend",
"libraryStatus": "EXTERNAL_REQUIRED",
"dependencyIds": []
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00272"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00271",
"parentTask": "M16-GAP-00270",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_CATALOG_REDO_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00270/manifest.json", "sha256": "c24c8cebb471d9a1d37e180a39d5091da36356cd4ea6065a1bf5110ac5ee86f0"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend", "sha256": "2e3481a9f155900774bbcc3e5d07ca65bedc2029e3281e86857fd943e81396cd"},
"librarySource": {"path": "tests/files/web/generated/WebGapCatalogRedo.blend", "sha256": "53367b4765383ae0cf232e02eaca1fbf07407946a600c91cf8d1f5303e21d0c7"},
"generator": {"path": "tools/web/generated/M16-GAP-00271.py", "sha256": "8012efb7f85f89625f13686743798051fa5febaae361b179117c992ca4bc972c"},
"desktopChecker": {"path": "tools/web/check-action-catalog-redo-desktop.py", "sha256": "89ff11f1ec2f76c1d34c49549e2499db2df084fff63fcfb156d65e3c1f46d8f1"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "f7fb2c2ab7b13535db130e1ed2ac3adc027ab77621f6bad129c4e0ff2ddd863b"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00271/catalog-redo-desktop-report.json", "sha256": "31dedccda115a8219307ad7f677602fc907e6e012297b4e6a6a68f19fb1415d5"},
"webReport": {"path": "tests/golden/M16-GAP-00271/catalog-redo-local-exact-report.json", "sha256": "25e5b338ad95d2e09e0cc651fd14f5c66a21be78f3d0d0039f8b161386e2fdb9"},
"status": {"path": "docs/status/M16-GAP-00271.md", "sha256": "d660b0ec53156000900bfbc2794d583a321788acba6298de35f228cf8cf6111b"},
"taskContext": {"path": "tests/golden/M16-GAP-00271/task-context.json", "sha256": "1ef1edcfb45f3ce201efec1aa2efb39f95aeaec909eccb02e13cc7f98335a11b"}
},
"nextTask": "M16-GAP-00272"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00271",
"parentTask": "M16-GAP-00270",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.catalog_redo 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:asset.catalog_redo",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00271.py -- tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00271",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00271"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00271.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1817,
"contextRemainingTokens": 453
},
"source": {
"bytes": 8087,
"tokens": 2023
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00271.py",
"bytes": 1043,
"tokens": 261
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00271-operator-asset.catalog_redo.blend",
"bytes": 85877,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 813863,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00271/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00271.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00271/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1043,
"tokens": 261
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00272",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00271.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00270/manifest.json",
"parentStatus": "docs/status/M16-GAP-00270.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00271.md",
"tests/golden/M16-GAP-00270/manifest.json",
"docs/status/M16-GAP-00270.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-00270",
"parentTask": "M16-GAP-00269",
"status": "done",
"nextTask": "M16-GAP-00271",
"artifactCount": 16
},
"statusSummary": [
"# M16-GAP-00270 Status",
"status: done",
"task: asset.catalog_new operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture links one object from external `WebGapCatalogNew.blend`.",
" Blender desktop observes the no-catalog-selection boundary as `poll=false`,",
" records `CANCELLED` for `ASSET_OT_catalog_new`, and confirms no Main"
]
},
"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": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00271.md",
"bytes": 1779,
"lines": 38,
"tokens": 445
},
{
"path": "tests/golden/M16-GAP-00270/manifest.json",
"bytes": 2800,
"lines": 30,
"tokens": 700
},
{
"path": "docs/status/M16-GAP-00270.md",
"bytes": 1013,
"lines": 27,
"tokens": 254
}
],
"sourceTokens": 2023,
"evidenceFiles": 1,
"evidenceBytes": 1043,
"evidenceTokens": 261,
"totalTokens": 2284,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3308,
"serializedContextTokens": 753,
"withinBudget": true
}
}

View File

@@ -0,0 +1,22 @@
{
"after": {
"filepath": "//WebGapCatalogUndo.blend",
"name": "WebGapCatalogUndo.blend",
"packed": false
},
"before": {
"filepath": "//WebGapCatalogUndo.blend",
"name": "WebGapCatalogUndo.blend",
"packed": false
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend",
"fixtureSha256": "fa003b726f82cf42dfbd5ae027ad6b6c8ff03bdcc337154d835cae241a1265cd",
"mainMutation": "NONE",
"operation": "ASSET_CATALOG_UNDO_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00272"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00272",
"operation": "ASSET_CATALOG_UNDO_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend",
"sha256": "fa003b726f82cf42dfbd5ae027ad6b6c8ff03bdcc337154d835cae241a1265cd"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"libraryId": "library:WebGapCatalogUndo.blend",
"sourcePath": "//WebGapCatalogUndo.blend",
"libraryStatus": "EXTERNAL_REQUIRED",
"dependencyIds": []
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00273"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00272",
"parentTask": "M16-GAP-00271",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_CATALOG_UNDO_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00271/manifest.json", "sha256": "d46fdf0ef0d6c1702682abc8ac076bbd0d46298d380995f6d62003029b489513"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend", "sha256": "fa003b726f82cf42dfbd5ae027ad6b6c8ff03bdcc337154d835cae241a1265cd"},
"librarySource": {"path": "tests/files/web/generated/WebGapCatalogUndo.blend", "sha256": "2ee954737c6f35b5f9af2eb5f350ea3e34a9ff6f491b8a4184ccb18875c6f3b8"},
"generator": {"path": "tools/web/generated/M16-GAP-00272.py", "sha256": "e7aac853fe0c589dc19375ab30259635e5af15c59aeb12a75eb8f7c6ac745052"},
"desktopChecker": {"path": "tools/web/check-action-catalog-undo-desktop.py", "sha256": "4a4866dc48a2fc8318549ef5a143697b2ba51643b8be3865975596882569c773"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "59c3520ab3de2f8275c730dd9b9680ed9b64aced4dcccc800b051490b6715a93"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00272/catalog-undo-desktop-report.json", "sha256": "21d131f2b2c5ffe8772bcb4606dbf16388467572cd0542c6dd16c66e1730b712"},
"webReport": {"path": "tests/golden/M16-GAP-00272/catalog-undo-local-exact-report.json", "sha256": "4cb20b624a5f96d417c33d928b760befaacb8c59610f197ff1a666d1fc78a5f0"},
"status": {"path": "docs/status/M16-GAP-00272.md", "sha256": "522fe8b32558b75f87488fafe11ebc17994bb9742f24663c5ea5a85d64e6598c"},
"taskContext": {"path": "tests/golden/M16-GAP-00272/task-context.json", "sha256": "ce9557e77c46435c6153a6173fb59b5d50686d8738bbab96490d631965219867"}
},
"nextTask": "M16-GAP-00273"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00272",
"parentTask": "M16-GAP-00271",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.catalog_undo 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:asset.catalog_undo",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00272.py -- tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00272",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00272"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00272.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1808,
"contextRemainingTokens": 451
},
"source": {
"bytes": 8096,
"tokens": 2025
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00272.py",
"bytes": 995,
"tokens": 249
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00272-operator-asset.catalog_undo.blend",
"bytes": 85892,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 817415,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00272/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00272.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00272/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 995,
"tokens": 249
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00273",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00272.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00271/manifest.json",
"parentStatus": "docs/status/M16-GAP-00271.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00272.md",
"tests/golden/M16-GAP-00271/manifest.json",
"docs/status/M16-GAP-00271.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-00271",
"parentTask": "M16-GAP-00270",
"status": "done",
"nextTask": "M16-GAP-00272",
"artifactCount": 16
},
"statusSummary": [
"# M16-GAP-00271 Status",
"status: done",
"task: asset.catalog_redo operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture links one object from external `WebGapCatalogRedo.blend`.",
" Blender desktop observes the no-catalog-selection boundary as `poll=false`,",
" records `CANCELLED` for `ASSET_OT_catalog_redo`, and confirms no Main"
]
},
"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": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00272.md",
"bytes": 1779,
"lines": 38,
"tokens": 445
},
{
"path": "tests/golden/M16-GAP-00271/manifest.json",
"bytes": 2806,
"lines": 30,
"tokens": 702
},
{
"path": "docs/status/M16-GAP-00271.md",
"bytes": 1016,
"lines": 27,
"tokens": 254
}
],
"sourceTokens": 2025,
"evidenceFiles": 1,
"evidenceBytes": 995,
"evidenceTokens": 249,
"totalTokens": 2274,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3298,
"serializedContextTokens": 752,
"withinBudget": true
}
}

View File

@@ -0,0 +1,22 @@
{
"after": {
"filepath": "//WebGapCatalogUndoPush.blend",
"name": "WebGapCatalogUndoPush.blend",
"packed": false
},
"before": {
"filepath": "//WebGapCatalogUndoPush.blend",
"name": "WebGapCatalogUndoPush.blend",
"packed": false
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend",
"fixtureSha256": "f835a3088b975a283a99a69738dbf0ecc8a71b463b3c124da15ea6e54599256b",
"mainMutation": "NONE",
"operation": "ASSET_CATALOG_UNDO_PUSH_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00273"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00273",
"operation": "ASSET_CATALOG_UNDO_PUSH_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend",
"sha256": "f835a3088b975a283a99a69738dbf0ecc8a71b463b3c124da15ea6e54599256b"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"libraryId": "library:WebGapCatalogUndoPush.blend",
"sourcePath": "//WebGapCatalogUndoPush.blend",
"libraryStatus": "EXTERNAL_REQUIRED",
"dependencyIds": []
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00274"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00273",
"parentTask": "M16-GAP-00272",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_CATALOG_UNDO_PUSH_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00272/manifest.json", "sha256": "eb3675367849f1a784e8028a43efac24fcede55cedd38d55b121cd88aa1facae"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend", "sha256": "f835a3088b975a283a99a69738dbf0ecc8a71b463b3c124da15ea6e54599256b"},
"librarySource": {"path": "tests/files/web/generated/WebGapCatalogUndoPush.blend", "sha256": "448fdabd5281e25a949ceefdb0b76804f2a47d2d9e5b784f8f998f0be289fd4c"},
"generator": {"path": "tools/web/generated/M16-GAP-00273.py", "sha256": "120262e67b215a5d778100b820d74b8d3f216b20e36402a4f389099751a728c2"},
"desktopChecker": {"path": "tools/web/check-action-catalog-undo-push-desktop.py", "sha256": "7e218eff97f8d4a2bd475d9957a94a784f4a76da3b35938389eb59eae7592795"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "abe69afee4f6a670d7c71abeba44118d7a01020ebac4665793451eafd4a7c0d5"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00273/catalog-undo-push-desktop-report.json", "sha256": "03421f7e7ffe6eb3f0ec93c6f09cd505f806e228145cf4ce6d55e3b841b8b34b"},
"webReport": {"path": "tests/golden/M16-GAP-00273/catalog-undo-push-local-exact-report.json", "sha256": "86e5cabacde4ee419d71011b902e0fc561e7da94028879bca4ca0315ad1d4f72"},
"status": {"path": "docs/status/M16-GAP-00273.md", "sha256": "5e93f2d8942d2bf5f49beef7fb427e9968e359ed6ada8a40d11072549075f2d8"},
"taskContext": {"path": "tests/golden/M16-GAP-00273/task-context.json", "sha256": "8679b3271d07fe1d4eaf2c6dcc6ef833d9c2853dda4643339071c60dc8bfe2f7"}
},
"nextTask": "M16-GAP-00274"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00273",
"parentTask": "M16-GAP-00272",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.catalog_undo_push 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:asset.catalog_undo_push",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00273.py -- tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00273",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00273"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00273.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1783,
"contextRemainingTokens": 445
},
"source": {
"bytes": 8121,
"tokens": 2031
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00273.py",
"bytes": 1007,
"tokens": 252
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00273-operator-asset.catalog_undo_push.blend",
"bytes": 85934,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 820984,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00273/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00273.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00273/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1007,
"tokens": 252
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00274",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00273.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00272/manifest.json",
"parentStatus": "docs/status/M16-GAP-00272.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00273.md",
"tests/golden/M16-GAP-00272/manifest.json",
"docs/status/M16-GAP-00272.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-00272",
"parentTask": "M16-GAP-00271",
"status": "done",
"nextTask": "M16-GAP-00273",
"artifactCount": 16
},
"statusSummary": [
"# M16-GAP-00272 Status",
"status: done",
"task: asset.catalog_undo operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture links one object from external `WebGapCatalogUndo.blend`.",
" Blender desktop observes the no-catalog-selection boundary as `poll=false`,",
" records `CANCELLED` for `ASSET_OT_catalog_undo`, and confirms no Main"
]
},
"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": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00273.md",
"bytes": 1804,
"lines": 38,
"tokens": 451
},
{
"path": "tests/golden/M16-GAP-00272/manifest.json",
"bytes": 2806,
"lines": 30,
"tokens": 702
},
{
"path": "docs/status/M16-GAP-00272.md",
"bytes": 1016,
"lines": 27,
"tokens": 254
}
],
"sourceTokens": 2031,
"evidenceFiles": 1,
"evidenceBytes": 1007,
"evidenceTokens": 252,
"totalTokens": 2283,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3307,
"serializedContextTokens": 757,
"withinBudget": true
}
}

View File

@@ -0,0 +1,22 @@
{
"after": {
"filepath": "//WebGapCatalogsSave.blend",
"name": "WebGapCatalogsSave.blend",
"packed": false
},
"before": {
"filepath": "//WebGapCatalogsSave.blend",
"name": "WebGapCatalogsSave.blend",
"packed": false
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend",
"fixtureSha256": "959faaac852e63a8e2ba2f90ef700ab8cf96b8dfe1046b37d24900ae69efae2a",
"mainMutation": "NONE",
"operation": "ASSET_CATALOGS_SAVE_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00274"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00274",
"operation": "ASSET_CATALOGS_SAVE_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend",
"sha256": "959faaac852e63a8e2ba2f90ef700ab8cf96b8dfe1046b37d24900ae69efae2a"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"libraryId": "library:WebGapCatalogsSave.blend",
"sourcePath": "//WebGapCatalogsSave.blend",
"libraryStatus": "EXTERNAL_REQUIRED",
"dependencyIds": []
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00275"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00274",
"parentTask": "M16-GAP-00273",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_CATALOGS_SAVE_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00273/manifest.json", "sha256": "3b45536a28d99f899fb095a5d2e31265a8ef2b7fb92ceb8be26e061621e253c1"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend", "sha256": "959faaac852e63a8e2ba2f90ef700ab8cf96b8dfe1046b37d24900ae69efae2a"},
"librarySource": {"path": "tests/files/web/generated/WebGapCatalogsSave.blend", "sha256": "11379128d21ba1ffd289a6155833729b2ee8f290b1aa390a4cd3c0e4afafd38d"},
"generator": {"path": "tools/web/generated/M16-GAP-00274.py", "sha256": "7db1e65ed1f4329210791cfffc2888c321073bfb557cbac158577d7d4375bb59"},
"desktopChecker": {"path": "tools/web/check-action-catalogs-save-desktop.py", "sha256": "ffa7e28e8bfb2669ff2e05a10edc7794eb43c31c0d4abaa3841b1887424bea92"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "60427df6b18192a5cf1fa892204330e14b43857f8367a33db0be5db4dcc34c1c"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00274/catalogs-save-desktop-report.json", "sha256": "b86ad738543cc1e04fde964e5d4cbcd5db2e9327838e3afda54110df708fea6a"},
"webReport": {"path": "tests/golden/M16-GAP-00274/catalogs-save-local-exact-report.json", "sha256": "6513408d34edd25705fc7fcc2516f3f51761c36880c829ff5c1e208b286f61d4"},
"status": {"path": "docs/status/M16-GAP-00274.md", "sha256": "fddc4251a417c8478d8cc01436e75c7e652a41c12fdea533bb440bef8a7bdad8"},
"taskContext": {"path": "tests/golden/M16-GAP-00274/task-context.json", "sha256": "8c82ad5daa15b56a5964d3fb9aea734e995bc874ef8ed418380d840825c5d480"}
},
"nextTask": "M16-GAP-00275"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00274",
"parentTask": "M16-GAP-00273",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.catalogs_save data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.",
"scope": {
"gap": "operator:asset.catalogs_save",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00274.py -- tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00274",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00274"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00274.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1760,
"contextRemainingTokens": 439
},
"source": {
"bytes": 8144,
"tokens": 2037
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00274.py",
"bytes": 1435,
"tokens": 359
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00274-operator-asset.catalogs_save.blend",
"bytes": 85910,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 824532,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00274/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00274.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00274/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1435,
"tokens": 359
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00275",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00274.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00273/manifest.json",
"parentStatus": "docs/status/M16-GAP-00273.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00274.md",
"tests/golden/M16-GAP-00273/manifest.json",
"docs/status/M16-GAP-00273.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-00273",
"parentTask": "M16-GAP-00272",
"status": "done",
"nextTask": "M16-GAP-00274",
"artifactCount": 16
},
"statusSummary": [
"# M16-GAP-00273 Status",
"status: done",
"task: asset.catalog_undo_push operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture links one object from external `WebGapCatalogUndoPush.blend`.",
" Blender desktop observes the no-catalog-selection boundary as `poll=false`,",
" records `CANCELLED` for `ASSET_OT_catalog_undo_push`, and confirms no Main"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1784,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 38,
"taskTokens": 446
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00274.md",
"bytes": 1784,
"lines": 38,
"tokens": 446
},
{
"path": "tests/golden/M16-GAP-00273/manifest.json",
"bytes": 2835,
"lines": 30,
"tokens": 709
},
{
"path": "docs/status/M16-GAP-00273.md",
"bytes": 1030,
"lines": 27,
"tokens": 258
}
],
"sourceTokens": 2037,
"evidenceFiles": 1,
"evidenceBytes": 1435,
"evidenceTokens": 359,
"totalTokens": 2396,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3420,
"serializedContextTokens": 754,
"withinBudget": true
}
}

View File

@@ -0,0 +1,22 @@
{
"after": {
"filepath": "//WebGapAssetClear.blend",
"name": "WebGapAssetClear.blend",
"packed": false
},
"before": {
"filepath": "//WebGapAssetClear.blend",
"name": "WebGapAssetClear.blend",
"packed": false
},
"blenderVersion": "5.2.0 LTS",
"fixture": "/home/mes123456/workinf_Blender_Wasm/tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend",
"fixtureSha256": "0d537a68b2f11f3f153522cf004216608fddb71f1c3a433875472bd534961c80",
"mainMutation": "NONE",
"operation": "ASSET_CLEAR_DESKTOP",
"operatorStatus": "CANCELLED",
"poll": false,
"saveReopen": "EXACT",
"schemaVersion": 1,
"task": "M16-GAP-00275"
}

View File

@@ -0,0 +1,28 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00275",
"operation": "ASSET_CLEAR_LOCAL_EXACT",
"fixture": {
"path": "tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend",
"sha256": "0d537a68b2f11f3f153522cf004216608fddb71f1c3a433875472bd534961c80"
},
"desktop": {
"status": "EXACT",
"report": "tests/golden/M16-GAP-00275/asset-clear-desktop-report.json",
"poll": false,
"operatorStatus": "CANCELLED",
"mainMutation": "NONE"
},
"wasm": {
"status": "EXACT",
"libraryId": "library:WebGapAssetClear.blend",
"sourcePath": "//WebGapAssetClear.blend",
"libraryStatus": "EXTERNAL_REQUIRED",
"dependencyIds": []
},
"saveReopen": "EXACT",
"negative": {
"malformedBlend": "REJECTED_WITHOUT_MAIN_MUTATION"
},
"nextTask": "M16-GAP-00276"
}

View File

@@ -0,0 +1,29 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00275",
"parentTask": "M16-GAP-00274",
"enablingTask": false,
"parityStateChange": true,
"runtime": "BLENDER_5_2_LOCAL_EXACT",
"operation": "ASSET_CLEAR_LOCAL_EXACT",
"status": "done",
"artifacts": {
"parentManifest": {"path": "tests/golden/M16-GAP-00274/manifest.json", "sha256": "f6172a4c559f540aac9937d39c55ce377de3e2d802d7c76da4ff1ee415967945"},
"fixture": {"path": "tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend", "sha256": "0d537a68b2f11f3f153522cf004216608fddb71f1c3a433875472bd534961c80"},
"librarySource": {"path": "tests/files/web/generated/WebGapAssetClear.blend", "sha256": "2d8430142618ca61e08110b59254ca58a3028584c12d084c26e843f7be0b65e2"},
"generator": {"path": "tools/web/generated/M16-GAP-00275.py", "sha256": "6cf60da3cbdf0c58af693489c800d60fdb719e963c105edc63c2346a9936cc6a"},
"desktopChecker": {"path": "tools/web/check-action-asset-clear-desktop.py", "sha256": "f5588fa8170c5ed1383a024dc9ea83c12259c49b772e8843d32df40bf2ccbb53"},
"webChecker": {"path": "tools/web/check-generated-gap.mjs", "sha256": "9b80119598b66a90d14860d9f3035ff99bfe0af4b8b34115fabdba6e5da676b5"},
"reader": {"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", "sha256": "9c0af422cc14634979497e2c8585e945a8402ab9f30b182d882da46786a1a711"},
"nativeStub": {"path": "web/engine/web_engine_native_reader_stub.cpp", "sha256": "2a1526e08cf446bb23a91c8c2ae799db38a0aeed0a809a15ead427780600481a"},
"wasm": {"path": "web/app/src/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmPublic": {"path": "web/app/public/vendor/blender/web_engine.wasm", "sha256": "aa26c3b422e79ff84557245dc8d5870125f237aa365ac7ebdc727c2d0b83f615"},
"wasmJs": {"path": "web/app/src/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"wasmJsPublic": {"path": "web/app/public/vendor/blender/web_engine.js", "sha256": "2263ccecdf7193aeb8508119accfe01c65fa991124969e0e7ede7b3af3057b35"},
"desktopReport": {"path": "tests/golden/M16-GAP-00275/asset-clear-desktop-report.json", "sha256": "6cf741f2b11fd71c752357f4bf5b1f8a501f95290b25dae6219a8ed389454f67"},
"webReport": {"path": "tests/golden/M16-GAP-00275/asset-clear-local-exact-report.json", "sha256": "4effc24108374f2d87cf862c5aac8b7fae814e219957759c5256c568a5dcbc21"},
"status": {"path": "docs/status/M16-GAP-00275.md", "sha256": "5d47cdf2d57f114c262638677352047c7c2bb004822ea719b14b9c0f45078a24"},
"taskContext": {"path": "tests/golden/M16-GAP-00275/task-context.json", "sha256": "841ce4b4e4d4d044746e71160c2b2edca9200370e456fe90658a2524533febd6"}
},
"nextTask": "M16-GAP-00276"
}

View File

@@ -0,0 +1,185 @@
{
"schemaVersion": 1,
"task": "M16-GAP-00275",
"parentTask": "M16-GAP-00274",
"status": "in_progress",
"goal": "Make the same minimal fixture produce observable operator:asset.clear 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:asset.clear",
"ownerFamily": "OPERATOR",
"implementationClass": "LOCAL_EXACT"
},
"commands": [
"build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/M16-GAP-00275.py -- tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend",
"npm --prefix web run test:generated-gap -- --task M16-GAP-00275",
"node tools/web/check-generated-gap.mjs --task M16-GAP-00275"
],
"inputPaths": [
"tools/web/generated/M16-GAP-00275.py"
],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 1831,
"contextRemainingTokens": 457
},
"source": {
"bytes": 8073,
"tokens": 2019
},
"selected": [
{
"path": "tools/web/generated/M16-GAP-00275.py",
"bytes": 1425,
"tokens": 357
}
],
"excluded": [
{
"path": "tests/files/web/generated/M16-GAP-00275-operator-asset.clear.blend",
"bytes": 85898,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"bytes": 240371,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tools/web/check-generated-gap.mjs",
"bytes": 828064,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/M16-GAP-00275/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/M16-GAP-00275.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/M16-GAP-00275/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 1,
"bytes": 1425,
"tokens": 357
}
},
"exitCriteria": [
"desktop fixture evidence exists",
"WASM uses the same fixture",
"comparator passes",
"save/reopen preserves Main",
"manifest hashes all artifacts"
],
"nextTask": "M16-GAP-00276",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/M16-GAP-00275.md",
"taskIndex": "tests/golden/M15-03A/task-index.json",
"parentManifest": "tests/golden/M16-GAP-00274/manifest.json",
"parentStatus": "docs/status/M16-GAP-00274.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/M16-GAP-00275.md",
"tests/golden/M16-GAP-00274/manifest.json",
"docs/status/M16-GAP-00274.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-00274",
"parentTask": "M16-GAP-00273",
"status": "done",
"nextTask": "M16-GAP-00275",
"artifactCount": 16
},
"statusSummary": [
"# M16-GAP-00274 Status",
"status: done",
"task: asset.catalogs_save operator LOCAL_EXACT slice",
"updated: 2026-08-23 America/New_York",
"scope:",
"- The fixture links one object from external `WebGapCatalogsSave.blend`.",
" Blender desktop observes the no-active-asset-library boundary as `poll=false`,",
" records `CANCELLED` for `ASSET_OT_catalogs_save`, and confirms no Main"
]
},
"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": 2495,
"lines": 47,
"tokens": 624
},
{
"path": "docs/tasks/M16-GAP-00275.md",
"bytes": 1744,
"lines": 38,
"tokens": 436
},
{
"path": "tests/golden/M16-GAP-00274/manifest.json",
"bytes": 2812,
"lines": 30,
"tokens": 703
},
{
"path": "docs/status/M16-GAP-00274.md",
"bytes": 1022,
"lines": 27,
"tokens": 256
}
],
"sourceTokens": 2019,
"evidenceFiles": 1,
"evidenceBytes": 1425,
"evidenceTokens": 357,
"totalTokens": 2376,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3400,
"serializedContextTokens": 748,
"withinBudget": true
}
}

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