Complete M16 action select circle parity
This commit is contained in:
@@ -31,6 +31,7 @@
|
|||||||
#include "BLO_core_file_reader.hh"
|
#include "BLO_core_file_reader.hh"
|
||||||
|
|
||||||
#include "DNA_genfile.h"
|
#include "DNA_genfile.h"
|
||||||
|
#include "DNA_anim_enums.h"
|
||||||
#include "DNA_curve_enums.h"
|
#include "DNA_curve_enums.h"
|
||||||
#include "DNA_lattice_types.h"
|
#include "DNA_lattice_types.h"
|
||||||
#include "DNA_mask_types.h"
|
#include "DNA_mask_types.h"
|
||||||
@@ -1466,8 +1467,8 @@ std::string modifier_type_name(const int64_t type)
|
|||||||
"ARRAY", "EDGE_SPLIT", "DISPLACE", "UV_PROJECT", "SMOOTH", "CAST",
|
"ARRAY", "EDGE_SPLIT", "DISPLACE", "UV_PROJECT", "SMOOTH", "CAST",
|
||||||
"MESH_DEFORM", "PARTICLE_SYSTEM", "PARTICLE_INSTANCE", "EXPLODE", "CLOTH", "COLLISION",
|
"MESH_DEFORM", "PARTICLE_SYSTEM", "PARTICLE_INSTANCE", "EXPLODE", "CLOTH", "COLLISION",
|
||||||
"BEVEL", "SHRINKWRAP", "FLUID_SIM", "MASK", "SIMPLE_DEFORM", "MULTIRES",
|
"BEVEL", "SHRINKWRAP", "FLUID_SIM", "MASK", "SIMPLE_DEFORM", "MULTIRES",
|
||||||
"SURFACE", "UNSUPPORTED_31", "SHAPE_KEY", "SOLIDIFY", "SCREW", "WARP", "WEIGHT_VG_EDIT",
|
"SURFACE", "UNSUPPORTED_31", "SHAPE_KEY", "SOLIDIFY", "SCREW", "WARP", "VERTEX_WEIGHT_EDIT",
|
||||||
"WEIGHT_VG_MIX", "WEIGHT_VG_PROXIMITY", "OCEAN", "DYNAMIC_PAINT", "REMESH", "SKIN",
|
"VERTEX_WEIGHT_MIX", "VERTEX_WEIGHT_PROXIMITY", "OCEAN", "DYNAMIC_PAINT", "REMESH", "SKIN",
|
||||||
"LAPLACIANSMOOTH", "TRIANGULATE", "UV_WARP", "MESH_CACHE", "LAPLACIANDEFORM", "WIREFRAME",
|
"LAPLACIANSMOOTH", "TRIANGULATE", "UV_WARP", "MESH_CACHE", "LAPLACIANDEFORM", "WIREFRAME",
|
||||||
"DATA_TRANSFER", "NORMAL_EDIT", "CORRECTIVE_SMOOTH", "MESH_SEQUENCE_CACHE", "SURFACE_DEFORM",
|
"DATA_TRANSFER", "NORMAL_EDIT", "CORRECTIVE_SMOOTH", "MESH_SEQUENCE_CACHE", "SURFACE_DEFORM",
|
||||||
"WEIGHTED_NORMAL", "WELD", "FLUID", "NODES", "MESH_TO_VOLUME", "VOLUME_DISPLACE", "VOLUME_TO_MESH",
|
"WEIGHTED_NORMAL", "WELD", "FLUID", "NODES", "MESH_TO_VOLUME", "VOLUME_DISPLACE", "VOLUME_TO_MESH",
|
||||||
@@ -1634,8 +1635,8 @@ json modifier_parameters(const ParsedBlend &blend,
|
|||||||
parameters["symmetryAxes"] = read_integer(*blend.sdna, modifier, "symmetry_axes").value_or(1);
|
parameters["symmetryAxes"] = read_integer(*blend.sdna, modifier, "symmetry_axes").value_or(1);
|
||||||
break;
|
break;
|
||||||
case 33:
|
case 33:
|
||||||
parameters["thickness"] = read_float(*blend.sdna, modifier, "offset_fac").value_or(0.01f);
|
parameters["thickness"] = read_float(*blend.sdna, modifier, "offset").value_or(0.01f);
|
||||||
parameters["offset"] = read_float(*blend.sdna, modifier, "offset").value_or(-1.0f);
|
parameters["offset"] = read_float(*blend.sdna, modifier, "offset_fac").value_or(-1.0f);
|
||||||
break;
|
break;
|
||||||
case 34:
|
case 34:
|
||||||
append_target("ob_axis");
|
append_target("ob_axis");
|
||||||
@@ -2544,6 +2545,7 @@ json fcurve_channel(const ParsedBlend &blend, const ElementRef &fcurve)
|
|||||||
const std::optional<uint64_t> path_pointer = read_pointer(*blend.sdna, fcurve, "rna_path");
|
const std::optional<uint64_t> path_pointer = read_pointer(*blend.sdna, fcurve, "rna_path");
|
||||||
const std::string path = path_pointer ? read_raw_string(blend, *path_pointer, 2048) : std::string();
|
const std::string path = path_pointer ? read_raw_string(blend, *path_pointer, 2048) : std::string();
|
||||||
const int64_t array_index = read_integer(*blend.sdna, fcurve, "array_index").value_or(-1);
|
const int64_t array_index = read_integer(*blend.sdna, fcurve, "array_index").value_or(-1);
|
||||||
|
const int64_t extrapolation = read_integer(*blend.sdna, fcurve, "extend").value_or(FCURVE_EXTRAPOLATE_CONSTANT);
|
||||||
const std::string channel_path = path.empty() || array_index < 0 ?
|
const std::string channel_path = path.empty() || array_index < 0 ?
|
||||||
path :
|
path :
|
||||||
path + "[" + std::to_string(array_index) + "]";
|
path + "[" + std::to_string(array_index) + "]";
|
||||||
@@ -2563,8 +2565,31 @@ json fcurve_channel(const ParsedBlend &blend, const ElementRef &fcurve)
|
|||||||
const float value = values[4];
|
const float value = values[4];
|
||||||
if (!std::isfinite(frame) || !std::isfinite(value)) continue;
|
if (!std::isfinite(frame) || !std::isfinite(value)) continue;
|
||||||
const int interpolation = int(read_integer(*blend.sdna, *point, "ipo").value_or(2));
|
const int interpolation = int(read_integer(*blend.sdna, *point, "ipo").value_or(2));
|
||||||
|
const bool selected = (read_integer(*blend.sdna, *point, "f2").value_or(0) & BEZT_FLAG_SELECT) != 0;
|
||||||
|
const int easing = int(read_integer(*blend.sdna, *point, "easing").value_or(BEZT_IPO_EASE_AUTO));
|
||||||
|
const int handle_left = int(read_integer(*blend.sdna, *point, "h1").value_or(HD_FREE));
|
||||||
|
const int handle_right = int(read_integer(*blend.sdna, *point, "h2").value_or(HD_FREE));
|
||||||
|
const int keyframe_type = int(read_integer(*blend.sdna, *point, "hide").value_or(BEZT_KEYTYPE_KEYFRAME));
|
||||||
const char *interpolation_name = interpolation == 0 ? "CONSTANT" : interpolation == 1 ? "LINEAR" : "BEZIER";
|
const char *interpolation_name = interpolation == 0 ? "CONSTANT" : interpolation == 1 ? "LINEAR" : "BEZIER";
|
||||||
keyframes.push_back({{"frame", frame}, {"value", json::array({value})}, {"interpolation", interpolation_name}});
|
const char *easing_name = easing == BEZT_IPO_EASE_IN ? "EASE_IN" :
|
||||||
|
easing == BEZT_IPO_EASE_OUT ? "EASE_OUT" :
|
||||||
|
easing == BEZT_IPO_EASE_IN_OUT ? "EASE_IN_OUT" : "AUTO";
|
||||||
|
const char *handle_name = handle_left == HD_VECT && handle_right == HD_VECT ? "VECTOR" :
|
||||||
|
handle_left == HD_ALIGN && handle_right == HD_ALIGN ? "ALIGNED" :
|
||||||
|
handle_left == HD_AUTO_ANIM && handle_right == HD_AUTO_ANIM ? "AUTO_CLAMPED" :
|
||||||
|
handle_left == HD_AUTO && handle_right == HD_AUTO ? "AUTO" : "FREE";
|
||||||
|
const char *keyframe_type_name = keyframe_type == BEZT_KEYTYPE_EXTREME ? "EXTREME" :
|
||||||
|
keyframe_type == BEZT_KEYTYPE_BREAKDOWN ? "BREAKDOWN" :
|
||||||
|
keyframe_type == BEZT_KEYTYPE_JITTER ? "JITTER" :
|
||||||
|
keyframe_type == BEZT_KEYTYPE_MOVEHOLD ? "MOVING_HOLD" :
|
||||||
|
keyframe_type == BEZT_KEYTYPE_GENERATED ? "GENERATED" : "KEYFRAME";
|
||||||
|
keyframes.push_back({{"frame", frame},
|
||||||
|
{"value", json::array({value})},
|
||||||
|
{"interpolation", interpolation_name},
|
||||||
|
{"easing", easing_name},
|
||||||
|
{"handleType", handle_name},
|
||||||
|
{"keyframeType", keyframe_type_name},
|
||||||
|
{"selected", selected}});
|
||||||
frame_start = std::min(frame_start, frame);
|
frame_start = std::min(frame_start, frame);
|
||||||
frame_end = std::max(frame_end, frame);
|
frame_end = std::max(frame_end, frame);
|
||||||
}
|
}
|
||||||
@@ -2591,6 +2616,7 @@ json fcurve_channel(const ParsedBlend &blend, const ElementRef &fcurve)
|
|||||||
}
|
}
|
||||||
return { {"path", channel_path},
|
return { {"path", channel_path},
|
||||||
{"interpolation", channel_interpolation.empty() ? "BEZIER" : channel_interpolation},
|
{"interpolation", channel_interpolation.empty() ? "BEZIER" : channel_interpolation},
|
||||||
|
{"extrapolation", extrapolation == FCURVE_EXTRAPOLATE_LINEAR ? "LINEAR" : "CONSTANT"},
|
||||||
{"keyframes", std::move(keyframes)},
|
{"keyframes", std::move(keyframes)},
|
||||||
{"frameStart", std::isfinite(frame_start) ? frame_start : 0.0f},
|
{"frameStart", std::isfinite(frame_start) ? frame_start : 0.0f},
|
||||||
{"frameEnd", std::isfinite(frame_end) ? frame_end : 0.0f} };
|
{"frameEnd", std::isfinite(frame_end) ? frame_end : 0.0f} };
|
||||||
@@ -2625,6 +2651,11 @@ void append_action_animation(const ParsedBlend &blend,
|
|||||||
if (!visited.insert(visit_key).second) return;
|
if (!visited.insert(visit_key).second) return;
|
||||||
|
|
||||||
json channels = json::array();
|
json channels = json::array();
|
||||||
|
json markers = json::array();
|
||||||
|
for (const ElementRef &marker : linked_list_elements(blend, *action, "markers")) {
|
||||||
|
markers.push_back({{"name", read_string(*blend.sdna, marker, "name")},
|
||||||
|
{"frame", read_integer(*blend.sdna, marker, "frame").value_or(0)}});
|
||||||
|
}
|
||||||
const float action_frame_start = read_float(*blend.sdna, *action, "frame_start").value_or(0.0f);
|
const float action_frame_start = read_float(*blend.sdna, *action, "frame_start").value_or(0.0f);
|
||||||
const float action_frame_end = read_float(*blend.sdna, *action, "frame_end").value_or(0.0f);
|
const float action_frame_end = read_float(*blend.sdna, *action, "frame_end").value_or(0.0f);
|
||||||
float frame_start = std::numeric_limits<float>::infinity();
|
float frame_start = std::numeric_limits<float>::infinity();
|
||||||
@@ -2674,7 +2705,7 @@ void append_action_animation(const ParsedBlend &blend,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (channels.empty()) return;
|
if (channels.empty() && markers.empty()) return;
|
||||||
json unique_channels = json::array();
|
json unique_channels = json::array();
|
||||||
std::unordered_set<std::string> channel_keys;
|
std::unordered_set<std::string> channel_keys;
|
||||||
for (const json &channel : channels) {
|
for (const json &channel : channels) {
|
||||||
@@ -2689,6 +2720,7 @@ void append_action_animation(const ParsedBlend &blend,
|
|||||||
{"targetId", target_id},
|
{"targetId", target_id},
|
||||||
{"frameStart", std::isfinite(frame_start) ? frame_start : 0.0f},
|
{"frameStart", std::isfinite(frame_start) ? frame_start : 0.0f},
|
||||||
{"frameEnd", std::isfinite(frame_end) ? frame_end : 0.0f},
|
{"frameEnd", std::isfinite(frame_end) ? frame_end : 0.0f},
|
||||||
|
{"markers", std::move(markers)},
|
||||||
{"channels", std::move(channels)}});
|
{"channels", std::move(channels)}});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4023,6 +4055,11 @@ json scene_ir_from_blend(const ParsedBlend &blend,
|
|||||||
scene_fps = int(read_integer(*blend.sdna, *render, "frs_sec").value_or(24));
|
scene_fps = int(read_integer(*blend.sdna, *render, "frs_sec").value_or(24));
|
||||||
scene_fps_base = read_float(*blend.sdna, *render, "frs_sec_base").value_or(1.0f);
|
scene_fps_base = read_float(*blend.sdna, *render, "frs_sec_base").value_or(1.0f);
|
||||||
scene["renderEngine"] = read_string(*blend.sdna, *render, "engine");
|
scene["renderEngine"] = read_string(*blend.sdna, *render, "engine");
|
||||||
|
const int64_t render_flags = read_integer(*blend.sdna, *render, "flag").value_or(0);
|
||||||
|
if ((render_flags & SCER_PRV_RANGE) != 0) {
|
||||||
|
scene["previewRange"] = {{"start", read_integer(*blend.sdna, *render, "psfra").value_or(frame_start)},
|
||||||
|
{"end", read_integer(*blend.sdna, *render, "pefra").value_or(frame_end)}};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (const std::optional<ElementRef> units = embedded_element(*blend.sdna, element, "unit")) {
|
if (const std::optional<ElementRef> units = embedded_element(*blend.sdna, element, "unit")) {
|
||||||
unit_system = int(read_integer(*blend.sdna, *units, "system").value_or(unit_system));
|
unit_system = int(read_integer(*blend.sdna, *units, "system").value_or(unit_system));
|
||||||
|
|||||||
@@ -9,12 +9,16 @@
|
|||||||
3. `tests/golden/<parent>/manifest.json`:只取 parent、runtime、artifact hash、`nextTask`,最多 24 KiB。
|
3. `tests/golden/<parent>/manifest.json`:只取 parent、runtime、artifact hash、`nextTask`,最多 24 KiB。
|
||||||
4. `docs/status/<parent>.md`:只取上一任务的证据摘要,最多 6 KiB。
|
4. `docs/status/<parent>.md`:只取上一任务的证据摘要,最多 6 KiB。
|
||||||
|
|
||||||
四份输入的估算总量最多 3,500 tokens。实现代码、长日志、完整路线图和 parity ledger 只按任务卡列出的路径追加读取;它们不是默认上下文。
|
四份输入和证据内容最多占 2,476 tokens;另有 1,024 tokens 保留给打印任务包自身的 JSON 外壳,
|
||||||
|
因此模型实际输入仍不超过 3,500 tokens。实现代码、长日志、完整路线图和 parity ledger 只按任务卡列出的路径追加读取;它们不是默认上下文。
|
||||||
|
|
||||||
任务上下文生成器在生成 `inputPaths` 时还会前置执行证据筛选:最多 12 个证据路径,证据文件总计最多
|
任务上下文生成器在生成 `inputPaths` 时还会前置执行证据筛选:最多 12 个证据路径,证据文件总计最多
|
||||||
8 KiB,并从 3,500 token 总预算扣除四份基础文档后使用剩余空间。超限、缺失、越界或不可审计路径不会进入读取清单,
|
8 KiB,并从扣除 1,024-token 打印外壳和四份基础文档后的剩余空间中选择。超限、缺失、越界或不可审计路径不会进入读取清单,
|
||||||
而会写入 `inputSelection.excluded[]`,其中 `reason` 是稳定的机器可读排除原因;治理门会校验所选路径、字节总数和排除审计。
|
而会写入 `inputSelection.excluded[]`,其中 `reason` 是稳定的机器可读排除原因;治理门会校验所选路径、字节总数和排除审计。
|
||||||
|
|
||||||
|
默认 `print-task-context` 只输出紧凑任务包;完整选择审计仍写入 `task-context.json`,不会重复进入模型输入。
|
||||||
|
如果紧凑包自身超过预留外壳预算,`print-task-context` 会在 stdout 写入任何 JSON 前失败,避免超大包进入远程传输。
|
||||||
|
|
||||||
全量 gap 计划 `tests/golden/M15-03A/next-task-plan.json` 约 6.8 MiB,只能由盘点/生成门读取,禁止作为任务上下文打开。`task-index.json` 保存源计划 hash 和每条记录的偏移,`task-catalog.jsonl` 保存一行一个任务;`task-context` 只随机读取当前任务的一行。索引缺失、源 hash 漂移或 catalog 损坏会直接失败,不能回退加载整份计划。
|
全量 gap 计划 `tests/golden/M15-03A/next-task-plan.json` 约 6.8 MiB,只能由盘点/生成门读取,禁止作为任务上下文打开。`task-index.json` 保存源计划 hash 和每条记录的偏移,`task-catalog.jsonl` 保存一行一个任务;`task-context` 只随机读取当前任务的一行。索引缺失、源 hash 漂移或 catalog 损坏会直接失败,不能回退加载整份计划。
|
||||||
|
|
||||||
## 机器门禁
|
## 机器门禁
|
||||||
|
|||||||
@@ -31,11 +31,12 @@ Markdown checkbox 不能覆盖失败命令或 hash 漂移。
|
|||||||
| 任务卡 | 8 KiB | 最多 12 个输入路径、8 条命令;不复制日志 |
|
| 任务卡 | 8 KiB | 最多 12 个输入路径、8 条命令;不复制日志 |
|
||||||
| parent manifest | 24 KiB | 只记录必要 artifact,最多 32 项 |
|
| parent manifest | 24 KiB | 只记录必要 artifact,最多 32 项 |
|
||||||
| parent status | 6 KiB | 只保留命令、退出码、关键结果、风险和回滚 |
|
| parent status | 6 KiB | 只保留命令、退出码、关键结果、风险和回滚 |
|
||||||
| 四份输入合计 | 3,500 tokens | 由 `contextSizeReport` 和治理门同时检查 |
|
| 四份输入、证据与打印外壳 | 3,500 tokens | 内容最多 2,476 tokens,打印包预留 1,024 tokens;由 `contextSizeReport` 和治理门同时检查 |
|
||||||
| catalog 单行 | 2 KiB | 机器随机读取;执行者不得通读 catalog |
|
| catalog 单行 | 2 KiB | 机器随机读取;执行者不得通读 catalog |
|
||||||
|
|
||||||
生成阶段的证据读取清单另外受 `maxFiles=12`、`evidenceBytes=8 KiB` 和基础文档扣除后的剩余上下文空间约束。
|
生成阶段的证据读取清单另外受 `maxFiles=12`、`evidenceBytes=8 KiB` 和基础文档、1,024-token 打印外壳扣除后的剩余上下文空间约束。
|
||||||
每个未选路径必须有 `inputSelection.excluded[].reason`,因此校验器不会成为首次发现超大上下文的地方。
|
每个未选路径必须有 `inputSelection.excluded[].reason`,因此校验器不会成为首次发现超大上下文的地方。
|
||||||
|
`print-task-context` 也会在 JSON 输出前执行外壳预算检查;超限时只返回短诊断并以非零状态退出。
|
||||||
|
|
||||||
全量 `next-task-plan.json`、parity map 和 gap audit 是生成器输入,不是执行上下文。索引保存源
|
全量 `next-task-plan.json`、parity map 和 gap audit 是生成器输入,不是执行上下文。索引保存源
|
||||||
hash 和 catalog offset;源 hash、catalog hash 或 offset 损坏时必须重新生成,不能回退读取大计划。
|
hash 和 catalog offset;源 hash、catalog hash 或 offset 损坏时必须重新生成,不能回退读取大计划。
|
||||||
|
|||||||
@@ -9,10 +9,10 @@
|
|||||||
| 字段 | 值 |
|
| 字段 | 值 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| 里程碑 | M16 Main、Mesh、Modifier、Sculpt |
|
| 里程碑 | M16 Main、Mesh、Modifier、Sculpt |
|
||||||
| 当前任务 | `M16-GAP-00096` |
|
| 当前任务 | `M16-GAP-00137` |
|
||||||
| parent manifest | `tests/golden/M16-GAP-00095/manifest.json` |
|
| parent manifest | `tests/golden/M16-GAP-00136/manifest.json` |
|
||||||
| 任务卡 | [`tasks/M16-GAP-00096.md`](tasks/M16-GAP-00096.md) |
|
| 任务卡 | [`tasks/M16-GAP-00137.md`](tasks/M16-GAP-00137.md) |
|
||||||
| 专项验收 | `npm --prefix web run test:generated-gap -- --task M16-GAP-00096` |
|
| 专项验收 | `npm --prefix web run test:generated-gap -- --task M16-GAP-00137` |
|
||||||
|
|
||||||
领取前执行:
|
领取前执行:
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,8 @@
|
|||||||
|
|
||||||
## 最小上下文规则
|
## 最小上下文规则
|
||||||
|
|
||||||
默认只加载队列、当前任务卡、parent manifest 和 parent status;总量上限为 3,500 tokens。
|
默认只加载队列、当前任务卡、parent manifest 和 parent status;内容与打印包合计上限为 3,500 tokens,
|
||||||
|
其中 1,024 tokens 预留给紧凑任务包外壳。
|
||||||
实现细节按任务卡的文件清单追加读取。不要为了确认一个局部输入、IO 或安全任务而加载整份
|
实现细节按任务卡的文件清单追加读取。不要为了确认一个局部输入、IO 或安全任务而加载整份
|
||||||
`PROJECT_STATUS_AND_NEXT_WORK.md` 或完整 parity 计划。
|
`PROJECT_STATUS_AND_NEXT_WORK.md` 或完整 parity 计划。
|
||||||
|
|
||||||
|
|||||||
19
docs/status/M16-GAP-00096.md
Normal file
19
docs/status/M16-GAP-00096.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# M16-GAP-00096 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: SOLIDIFY modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh SOLIDIFY modifier stack exposure for `mesh:WebGapSolidifyMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapSolidify` as SOLIDIFY type code 33 with thickness `0.275` and offset `0.35`; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same SOLIDIFY stack entry with matching thickness/offset and generic visibility flags; save/reopen is exact.
|
||||||
|
- Reader maps Solidify DNA fields with Blender semantics (`offset` to thickness and `offset_fac` to offset).
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, direct comparator, and WebEngine build exited 0.
|
||||||
|
|
||||||
|
knownRisk: Solidify geometry evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00097`
|
||||||
18
docs/status/M16-GAP-00097.md
Normal file
18
docs/status/M16-GAP-00097.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00097 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: SUBSURF modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh SUBSURF modifier stack exposure for `mesh:WebGapSubsurfMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapSubsurf` as SUBSURF type code 1 with SIMPLE subdivision, viewport level 2, and render level 3; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same SUBSURF stack entry and matching subdivision parameters; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Subdivision geometry evaluation is unavailable in this build without OpenSubdiv; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00098`
|
||||||
18
docs/status/M16-GAP-00098.md
Normal file
18
docs/status/M16-GAP-00098.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00098 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: SURFACE modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh SURFACE modifier stack exposure for `mesh:WebGapSurfaceMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapSurface` as SURFACE type code 30; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same SURFACE stack entry with matching generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Surface deformation evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00099`
|
||||||
18
docs/status/M16-GAP-00099.md
Normal file
18
docs/status/M16-GAP-00099.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00099 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: SURFACE_DEFORM modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh SURFACE_DEFORM modifier stack exposure for `mesh:WebGapSurfaceDeformMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapSurfaceDeform` as SURFACE_DEFORM type code 52; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same SURFACE_DEFORM stack entry with matching generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Surface deformation binding/evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00100`
|
||||||
18
docs/status/M16-GAP-00100.md
Normal file
18
docs/status/M16-GAP-00100.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00100 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: TRIANGULATE modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh TRIANGULATE modifier stack exposure for `mesh:WebGapTriangulateMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapTriangulate` as TRIANGULATE type code 44 with FIXED quad and CLIP ngon methods; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same TRIANGULATE stack entry and matching triangulation methods; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Triangulation geometry evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00101`
|
||||||
18
docs/status/M16-GAP-00101.md
Normal file
18
docs/status/M16-GAP-00101.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00101 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: UV_PROJECT modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh UV_PROJECT modifier stack exposure for `mesh:WebGapUvProjectMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapUvProject` as UV_PROJECT type code 15; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same UV_PROJECT stack entry with matching generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: UV projection evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00102`
|
||||||
18
docs/status/M16-GAP-00102.md
Normal file
18
docs/status/M16-GAP-00102.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00102 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: UV_WARP modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh UV_WARP modifier stack exposure for `mesh:WebGapUvWarpMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapUvWarp` as UV_WARP type code 47; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same UV_WARP stack entry with matching generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: UV warp evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00103`
|
||||||
18
docs/status/M16-GAP-00103.md
Normal file
18
docs/status/M16-GAP-00103.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00103 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: VERTEX_WEIGHT_EDIT modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh VERTEX_WEIGHT_EDIT modifier stack exposure for `mesh:WebGapVertexWeightEditMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapVertexWeightEdit` as VERTEX_WEIGHT_EDIT type code 36; save/reopen is exact.
|
||||||
|
- Reader name table now uses Blender's canonical VERTEX_WEIGHT_EDIT name for type code 36; rebuilt WASM/Main exposes the same stack entry with matching generic flags.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, direct comparator, and WebEngine build exited 0.
|
||||||
|
|
||||||
|
knownRisk: Vertex weight editing evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00104`
|
||||||
18
docs/status/M16-GAP-00104.md
Normal file
18
docs/status/M16-GAP-00104.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00104 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: VERTEX_WEIGHT_MIX modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh VERTEX_WEIGHT_MIX modifier stack exposure for `mesh:WebGapVertexWeightMixMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapVertexWeightMix` as VERTEX_WEIGHT_MIX type code 37; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same VERTEX_WEIGHT_MIX stack entry with matching generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Vertex weight mixing evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00105`
|
||||||
18
docs/status/M16-GAP-00105.md
Normal file
18
docs/status/M16-GAP-00105.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00105 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: VERTEX_WEIGHT_PROXIMITY modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh VERTEX_WEIGHT_PROXIMITY modifier stack exposure for `mesh:WebGapVertexWeightProximityMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapVertexWeightProximity` as VERTEX_WEIGHT_PROXIMITY type code 38; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same VERTEX_WEIGHT_PROXIMITY stack entry with matching generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Vertex weight proximity evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00106`
|
||||||
18
docs/status/M16-GAP-00106.md
Normal file
18
docs/status/M16-GAP-00106.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00106 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: VOLUME_DISPLACE modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Volume-object VOLUME_DISPLACE modifier stack exposure for `object:WebGapVolumeDisplaceObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapVolumeDisplace` as VOLUME_DISPLACE type code 59 on a Volume object; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same VOLUME_DISPLACE stack entry with matching generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Volume displacement evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00107`
|
||||||
18
docs/status/M16-GAP-00107.md
Normal file
18
docs/status/M16-GAP-00107.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00107 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: VOLUME_TO_MESH modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh-hosted VOLUME_TO_MESH modifier stack exposure for `mesh:WebGapVolumeToMeshMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapVolumeToMesh` as VOLUME_TO_MESH type code 58; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same VOLUME_TO_MESH stack entry with matching generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Volume-to-mesh evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00108`
|
||||||
18
docs/status/M16-GAP-00108.md
Normal file
18
docs/status/M16-GAP-00108.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00108 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: WARP modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh WARP modifier stack exposure for `mesh:WebGapWarpMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapWarp` as WARP type code 35; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same WARP stack entry with matching generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Warp deformation evaluation remains metadata-only; this slice covers modifier stack transport and base metadata only.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00109`
|
||||||
18
docs/status/M16-GAP-00109.md
Normal file
18
docs/status/M16-GAP-00109.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00109 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: WAVE modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh WAVE modifier stack exposure for `mesh:WebGapWaveMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapWave` as WAVE type code 7 with height 0.65, width 1.75, and speed 0.42; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same WAVE stack entry and matching height, width, speed, and generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Wave deformation evaluation remains metadata-only; this slice covers modifier stack transport and selected parameter metadata.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00110`
|
||||||
18
docs/status/M16-GAP-00110.md
Normal file
18
docs/status/M16-GAP-00110.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00110 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: WEIGHTED_NORMAL modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh WEIGHTED_NORMAL modifier stack exposure for `mesh:WebGapWeightedNormalMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapWeightedNormal` as WEIGHTED_NORMAL type code 54 with weight 70; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same stack entry and matching weight plus generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Weighted normal evaluation remains metadata-only; this slice covers modifier stack transport and weight metadata.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00111`
|
||||||
18
docs/status/M16-GAP-00111.md
Normal file
18
docs/status/M16-GAP-00111.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00111 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: WELD modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh WELD modifier stack exposure for `mesh:WebGapWeldMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapWeld` as WELD type code 55 with merge threshold 0.125; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same stack entry and matching merge threshold plus generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Weld evaluation remains metadata-only; this slice covers modifier stack transport and merge threshold metadata.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00112`
|
||||||
18
docs/status/M16-GAP-00112.md
Normal file
18
docs/status/M16-GAP-00112.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00112 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: WIREFRAME modifier LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Mesh WIREFRAME modifier stack exposure for `mesh:WebGapWireframeMesh`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Desktop fixture exposes `WebGapWireframe` as WIREFRAME type code 48 with thickness 0.08; save/reopen is exact.
|
||||||
|
- WASM/Main exposes the same stack entry and matching thickness plus generic visibility flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: Wireframe evaluation remains metadata-only; this slice covers modifier stack transport and thickness metadata.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00113`
|
||||||
18
docs/status/M16-GAP-00113.md
Normal file
18
docs/status/M16-GAP-00113.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00113 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.bake_keys operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor bake-keys operation on `object:WebGapBakeKeysObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender generator creates two selected endpoint keys and executes `bpy.ops.action.bake_keys` in a real Action Editor context; each location channel contains frames 1 through 5 afterward.
|
||||||
|
- WASM/Main reads the same fixture with three matching channels and five keyframes per channel; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, desktop checker, npm comparator, and direct comparator exited 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers Action Editor bake semantics for selected endpoint segments; other editor contexts and bake options remain separate operator tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00114`
|
||||||
18
docs/status/M16-GAP-00114.md
Normal file
18
docs/status/M16-GAP-00114.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00114 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.clean operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor clean operation on `object:WebGapCleanObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender generator creates three location channels with frames 1, 3, and 5 and executes `bpy.ops.action.clean(threshold=0.01, channels=False)` in a real Action Editor context; each channel retains the single frame at 1.
|
||||||
|
- WASM/Main reads the same fixture with three matching channels and one keyframe per channel; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, and context handoff exited 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers Action Editor clean with a fixed threshold and channel mode; other clean options and editor contexts remain separate operator tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00115`
|
||||||
18
docs/status/M16-GAP-00115.md
Normal file
18
docs/status/M16-GAP-00115.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00115 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.clickselect operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor click-select operation on `object:WebGapClickSelectObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender generator creates three location channels with frames 1, 3, and 5, frames the Action Editor, and executes `bpy.ops.action.clickselect` at frame 3 with column selection; frame 3 is selected in all three channels.
|
||||||
|
- WASM/Main reads the same fixture with selected keyframe metadata, matching frame-3 selections, and save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, desktop checker, WASM comparator, direct comparator, context governance, and WASM rebuild exited 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers Action Editor click selection with column mode at a fixed frame; extend, channel-only, and other editor contexts remain separate operator tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00116`
|
||||||
18
docs/status/M16-GAP-00116.md
Normal file
18
docs/status/M16-GAP-00116.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00116 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.copy operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor copy operation on `object:WebGapCopyObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender generator selects frame 3 in all three location channels and executes `bpy.ops.action.copy` in a real Action Editor context.
|
||||||
|
- Desktop and WASM/Main observe the same selected source keys; copy leaves Main unchanged and save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and WASM-backed comparison exited 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers copying a fixed selected frame; paste, mixed-channel copy, and other editor contexts remain separate operator tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00117`
|
||||||
18
docs/status/M16-GAP-00117.md
Normal file
18
docs/status/M16-GAP-00117.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00117 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.delete operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor delete operation on `object:WebGapDeleteObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender generator selects frame 3 in all three location channels and executes `bpy.ops.action.delete(confirm=False)` in a real Action Editor context; each channel retains frames 1 and 5.
|
||||||
|
- WASM/Main reads the same three channels with matching `[1, 5]` keyframes; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and WASM-backed comparison exited 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers deleting one selected frame from Action Editor FCurves; confirmation behavior and other editor contexts remain separate operator tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00118`
|
||||||
18
docs/status/M16-GAP-00118.md
Normal file
18
docs/status/M16-GAP-00118.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00118 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.duplicate operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor duplicate operation on `object:WebGapDuplicateObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender generator selects frame 3 in all three location channels and executes `bpy.ops.action.duplicate`; each channel becomes `[1, 3, 3, 5]` with the duplicated key selected.
|
||||||
|
- WASM/Main reads the same duplicate keyframes and selected metadata; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and WASM-backed comparison exited 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers duplicating one selected frame in Action Editor; duplicate-move and other editor contexts remain separate operator tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00119`
|
||||||
18
docs/status/M16-GAP-00119.md
Normal file
18
docs/status/M16-GAP-00119.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00119 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.duplicate_move operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor duplicate-move operation on `object:WebGapDuplicateMoveObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender generator selects frame 3 and executes `bpy.ops.action.duplicate_move` with a time translation of +2; the duplicate lands at frame 5 and is selected in all three channels.
|
||||||
|
- WASM/Main reads the same `[1, 3, 5]` channels with frame 5 selected; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and WASM-backed comparison exited 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers duplicate-move with a fixed +2 frame translation; other transform modes and editor contexts remain separate operator tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00120`
|
||||||
18
docs/status/M16-GAP-00120.md
Normal file
18
docs/status/M16-GAP-00120.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00120 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.easing_type operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor easing-type operation on `object:WebGapEasingTypeObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender generator selects frame 3 and executes `bpy.ops.action.easing_type(type="EASE_IN_OUT")`; all three location curves report `AUTO, EASE_IN_OUT, AUTO`.
|
||||||
|
- WASM/Main now exports keyframe easing metadata and matches desktop; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, desktop checker, WASM rebuild, npm comparator, direct comparator, context handoff, and governance exited 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers EASE_IN_OUT on one selected frame; other easing modes and editor contexts remain separate operator tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00121`
|
||||||
18
docs/status/M16-GAP-00121.md
Normal file
18
docs/status/M16-GAP-00121.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00121 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.extrapolation_type operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor extrapolation-type operation on `object:WebGapExtrapolationTypeObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender generator selects the Action Editor FCurves and executes `bpy.ops.action.extrapolation_type(type="LINEAR")`; all three curves report LINEAR extrapolation.
|
||||||
|
- WASM/Main now exports FCurve extrapolation metadata and matches desktop; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, desktop checker, WASM rebuild, npm comparator, direct comparator, context handoff, and governance exited 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers LINEAR extrapolation; constant/cyclic modes and other editor contexts remain separate operator tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00122`
|
||||||
18
docs/status/M16-GAP-00122.md
Normal file
18
docs/status/M16-GAP-00122.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00122 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.frame_jump operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor frame-jump operation on `object:WebGapFrameJumpObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender generator selects frame 5 in all three location channels and executes `bpy.ops.action.frame_jump`; the scene current frame changes from 1 to 5.
|
||||||
|
- WASM/Main reads current frame 5 and matching selected frame metadata; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and governance exited 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers jumping to one selected frame; average-frame behavior with multiple selected times and other editor contexts remain separate operator tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00123`
|
||||||
18
docs/status/M16-GAP-00123.md
Normal file
18
docs/status/M16-GAP-00123.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00123 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.handle_type operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor handle-type operation on `object:WebGapHandleTypeObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender selects frame 3 in all three location channels and executes `bpy.ops.action.handle_type(type="VECTOR")`; all saved keyframes expose VECTOR handles.
|
||||||
|
- WASM/Main reads the same three channels, frames, selection flags, and handle types; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers VECTOR handles on one layered Action; mixed left/right handle modes and other Action operators remain separate tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00124`
|
||||||
18
docs/status/M16-GAP-00124.md
Normal file
18
docs/status/M16-GAP-00124.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00124 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.interpolation_type operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor interpolation-type operation on `object:WebGapInterpolationTypeObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender selects frame 3 in all three location channels and executes `bpy.ops.action.interpolation_type(type="LINEAR")`.
|
||||||
|
- Desktop and WASM/Main expose `BEZIER, LINEAR, BEZIER` per channel; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers LINEAR interpolation on selected keys; other interpolation families and operators remain separate tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00125`
|
||||||
18
docs/status/M16-GAP-00125.md
Normal file
18
docs/status/M16-GAP-00125.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00125 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.keyframe_insert operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor keyframe insertion on `object:WebGapKeyframeInsertObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender starts with frames 1 and 5, runs `bpy.ops.action.keyframe_insert(type="ALL")` at frame 3, and produces three keys in each location channel.
|
||||||
|
- Desktop and WASM/Main expose matching frames, values, and selection flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers `ALL` insertion into existing Action channels; grouped/selected-channel modes remain separate behavior.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00126`
|
||||||
18
docs/status/M16-GAP-00126.md
Normal file
18
docs/status/M16-GAP-00126.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00126 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.keyframe_type operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor keyframe-type operation on `object:WebGapKeyframeTypeObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender selects frame 3 in all three location channels and executes `bpy.ops.action.keyframe_type(type="BREAKDOWN")`.
|
||||||
|
- Reader maps `BezTriple.hide` to stable keyframe types; desktop and WASM/Main expose `KEYFRAME, BREAKDOWN, KEYFRAME` per channel.
|
||||||
|
- Save/reopen is exact and malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, rebuilt WASM, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers BREAKDOWN keyframe typing; EXTREME, JITTER, MOVING_HOLD and GENERATED types remain separate operator cases.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00127`
|
||||||
18
docs/status/M16-GAP-00127.md
Normal file
18
docs/status/M16-GAP-00127.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00127 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.markers_make_local operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor selected scene-marker localization on `object:WebGapMarkersMakeLocalObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender creates and selects `LocalActionMarker` at frame 3, then executes `bpy.ops.action.markers_make_local`; the marker moves into the Action.
|
||||||
|
- Reader exposes Action markers; desktop and WASM/Main both read `LocalActionMarker@3`, and save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, rebuilt WASM, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers one selected scene marker; multiple-marker ordering and unselected marker retention remain separate cases.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00128`
|
||||||
18
docs/status/M16-GAP-00128.md
Normal file
18
docs/status/M16-GAP-00128.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00128 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.mirror operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor X-axis mirror operation on `object:WebGapMirrorObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender selects all three location channels and executes `bpy.ops.action.mirror(type="XAXIS")`; all keyframe values are negated.
|
||||||
|
- Desktop and WASM/Main expose matching frames, values, and selection flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers X-axis value mirroring; current-frame and marker-based time mirroring remain separate operator cases.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00129`
|
||||||
18
docs/status/M16-GAP-00129.md
Normal file
18
docs/status/M16-GAP-00129.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00129 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.new operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor new-action operation on `object:WebGapActionNewObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender executes `bpy.ops.action.new` and creates/assigns `WebGapActionNewObjectAction.001` while preserving the prior Action for stash semantics.
|
||||||
|
- Desktop and WASM/Main expose the new Action with three channels; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, rebuilt WASM, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: Background execution requires explicit harness assignment of the newly created Action because the UI template pointer is unavailable; the operator-created datablock and resulting assigned state are still hash-bound.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00130`
|
||||||
18
docs/status/M16-GAP-00130.md
Normal file
18
docs/status/M16-GAP-00130.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00130 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.paste operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor internal clipboard paste on `object:WebGapPasteObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender copies the selected frame 3 keys and executes `bpy.ops.action.paste(offset="START", merge="MIX")` at frame 7.
|
||||||
|
- Desktop and WASM/Main expose frames 1, 3, 5, 7 on all channels with matching values; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers internal clipboard paste with START/MIX settings; other offset and merge modes remain separate tasks.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00131`
|
||||||
18
docs/status/M16-GAP-00131.md
Normal file
18
docs/status/M16-GAP-00131.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00131 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.previewrange_set operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor selected-key preview range on `object:WebGapPreviewRangeObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender executes `bpy.ops.action.previewrange_set`; the scene stores preview range `1..5` with preview enabled.
|
||||||
|
- Reader exposes `scene.previewRange`; desktop and WASM/Main match, and save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main scene state.
|
||||||
|
- Generator, rebuilt WASM, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: The Action Editor context computes the selected extent as the full 1..5 range in this background fixture; alternate channel-selection contexts remain separate cases.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00132`
|
||||||
18
docs/status/M16-GAP-00132.md
Normal file
18
docs/status/M16-GAP-00132.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00132 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.push_down operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor push-down into NLA on `object:WebGapPushDownObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender executes `bpy.ops.action.push_down`; active Action is removed from the active slot and moved to one NLA track with one strip.
|
||||||
|
- Desktop and WASM/Main expose the original Action and matching NLA strip/action identity; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation/NLA state.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers one push-down operation into an empty NLA stack; existing-track blending remains separate behavior.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00133`
|
||||||
18
docs/status/M16-GAP-00133.md
Normal file
18
docs/status/M16-GAP-00133.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00133 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.select_all operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor select-all operation on `object:WebGapSelectAllObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender clears selection and executes `bpy.ops.action.select_all(action="SELECT")`; all 9 keyframes become selected.
|
||||||
|
- Desktop and WASM/Main expose matching frames and selected flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers the SELECT mode; TOGGLE, DESELECT, and INVERT modes remain separate operator cases.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00134`
|
||||||
18
docs/status/M16-GAP-00134.md
Normal file
18
docs/status/M16-GAP-00134.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00134 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.select_box operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor box selection on `object:WebGapSelectBoxObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender executes `bpy.ops.action.select_box(mode="SET")` over the frame-3 region coordinates; only frame 3 is selected on all channels.
|
||||||
|
- Desktop and WASM/Main expose matching frames and selected flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers SET mode and a frame-only box; ADD/SUB/channel-range selection remains separate behavior.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00135`
|
||||||
18
docs/status/M16-GAP-00135.md
Normal file
18
docs/status/M16-GAP-00135.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# M16-GAP-00135 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.select_by_type operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope: Action Editor keyframe-type selection on `object:WebGapSelectByTypeObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender marks frame 3 as BREAKDOWN, clears selection, and executes `bpy.ops.action.select_by_type(type="BREAKDOWN", extend=False)`.
|
||||||
|
- Desktop and WASM/Main expose matching keyframe types and selected flags; save/reopen is exact.
|
||||||
|
- Malformed Blend input is rejected without mutating Main animation data.
|
||||||
|
- Generator, desktop checker, npm comparator, direct comparator, context handoff, and governance exit 0.
|
||||||
|
|
||||||
|
knownRisk: This slice covers BREAKDOWN selection; other keyframe types and extend behavior remain separate cases.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00136`
|
||||||
17
docs/status/M16-GAP-00136.md
Normal file
17
docs/status/M16-GAP-00136.md
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# M16-GAP-00136 Status
|
||||||
|
|
||||||
|
status: done
|
||||||
|
task: action.select_circle operator LOCAL_EXACT slice
|
||||||
|
updated: 2026-08-20 America/New_York
|
||||||
|
|
||||||
|
scope:
|
||||||
|
|
||||||
|
- Action Editor circle selection on `object:WebGapSelectCircleObject`.
|
||||||
|
|
||||||
|
evidence:
|
||||||
|
|
||||||
|
- Blender desktop and WASM/Main expose matching three location channels with frame 3 selected.
|
||||||
|
- Save/reopen is exact; malformed Blend input is rejected without Main mutation.
|
||||||
|
- Fixture generation, desktop checker, npm comparator, direct comparator, context handoff and manifest hashing passed.
|
||||||
|
|
||||||
|
nextTask: `M16-GAP-00137`
|
||||||
37
docs/tasks/M16-GAP-00097.md
Normal file
37
docs/tasks/M16-GAP-00097.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00097: modifier:SUBSURF LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00097
|
||||||
|
- parent: M16-GAP-00096
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:SUBSURF
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:SUBSURF 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-00097-modifier-SUBSURF.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00097.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-00097.py -- tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00097
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00097
|
||||||
|
|
||||||
|
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-00097/`
|
||||||
|
- Status: `docs/status/M16-GAP-00097.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00097/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00097 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00098.md
Normal file
37
docs/tasks/M16-GAP-00098.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00098: modifier:SURFACE LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00098
|
||||||
|
- parent: M16-GAP-00097
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:SURFACE
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:SURFACE 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-00098-modifier-SURFACE.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00098.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-00098.py -- tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00098
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00098
|
||||||
|
|
||||||
|
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-00098/`
|
||||||
|
- Status: `docs/status/M16-GAP-00098.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00098/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00098 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00099.md
Normal file
37
docs/tasks/M16-GAP-00099.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00099: modifier:SURFACE_DEFORM LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00099
|
||||||
|
- parent: M16-GAP-00098
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:SURFACE_DEFORM
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:SURFACE_DEFORM 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-00099-modifier-SURFACE_DEFORM.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00099.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-00099.py -- tests/files/web/generated/M16-GAP-00099-modifier-SURFACE_DEFORM.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00099
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00099
|
||||||
|
|
||||||
|
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-00099/`
|
||||||
|
- Status: `docs/status/M16-GAP-00099.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00099/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00099 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00100.md
Normal file
37
docs/tasks/M16-GAP-00100.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00100: modifier:TRIANGULATE LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00100
|
||||||
|
- parent: M16-GAP-00099
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:TRIANGULATE
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:TRIANGULATE 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-00100-modifier-TRIANGULATE.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00100.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-00100.py -- tests/files/web/generated/M16-GAP-00100-modifier-TRIANGULATE.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00100
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00100
|
||||||
|
|
||||||
|
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-00100/`
|
||||||
|
- Status: `docs/status/M16-GAP-00100.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00100/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00100 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00101.md
Normal file
37
docs/tasks/M16-GAP-00101.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00101: modifier:UV_PROJECT LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00101
|
||||||
|
- parent: M16-GAP-00100
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:UV_PROJECT
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:UV_PROJECT 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-00101-modifier-UV_PROJECT.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00101.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-00101.py -- tests/files/web/generated/M16-GAP-00101-modifier-UV_PROJECT.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00101
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00101
|
||||||
|
|
||||||
|
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-00101/`
|
||||||
|
- Status: `docs/status/M16-GAP-00101.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00101/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00101 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00102.md
Normal file
37
docs/tasks/M16-GAP-00102.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00102: modifier:UV_WARP LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00102
|
||||||
|
- parent: M16-GAP-00101
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:UV_WARP
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:UV_WARP 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-00102-modifier-UV_WARP.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00102.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-00102.py -- tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00102
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00102
|
||||||
|
|
||||||
|
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-00102/`
|
||||||
|
- Status: `docs/status/M16-GAP-00102.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00102/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00102 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00103.md
Normal file
37
docs/tasks/M16-GAP-00103.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00103: modifier:VERTEX_WEIGHT_EDIT LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00103
|
||||||
|
- parent: M16-GAP-00102
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:VERTEX_WEIGHT_EDIT
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:VERTEX_WEIGHT_EDIT 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-00103-modifier-VERTEX_WEIGHT_EDIT.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00103.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-00103.py -- tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00103
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00103
|
||||||
|
|
||||||
|
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-00103/`
|
||||||
|
- Status: `docs/status/M16-GAP-00103.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00103/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00103 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00104.md
Normal file
37
docs/tasks/M16-GAP-00104.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00104: modifier:VERTEX_WEIGHT_MIX LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00104
|
||||||
|
- parent: M16-GAP-00103
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:VERTEX_WEIGHT_MIX
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:VERTEX_WEIGHT_MIX 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-00104-modifier-VERTEX_WEIGHT_MIX.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00104.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-00104.py -- tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00104
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00104
|
||||||
|
|
||||||
|
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-00104/`
|
||||||
|
- Status: `docs/status/M16-GAP-00104.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00104/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00104 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00105.md
Normal file
37
docs/tasks/M16-GAP-00105.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00105: modifier:VERTEX_WEIGHT_PROXIMITY LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00105
|
||||||
|
- parent: M16-GAP-00104
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:VERTEX_WEIGHT_PROXIMITY
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:VERTEX_WEIGHT_PROXIMITY 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-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00105.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-00105.py -- tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00105
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00105
|
||||||
|
|
||||||
|
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-00105/`
|
||||||
|
- Status: `docs/status/M16-GAP-00105.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00105/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00105 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00106.md
Normal file
37
docs/tasks/M16-GAP-00106.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00106: modifier:VOLUME_DISPLACE LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00106
|
||||||
|
- parent: M16-GAP-00105
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:VOLUME_DISPLACE
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:VOLUME_DISPLACE 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-00106-modifier-VOLUME_DISPLACE.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00106.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-00106.py -- tests/files/web/generated/M16-GAP-00106-modifier-VOLUME_DISPLACE.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00106
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00106
|
||||||
|
|
||||||
|
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-00106/`
|
||||||
|
- Status: `docs/status/M16-GAP-00106.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00106/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00106 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00107.md
Normal file
37
docs/tasks/M16-GAP-00107.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00107: modifier:VOLUME_TO_MESH LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00107
|
||||||
|
- parent: M16-GAP-00106
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:VOLUME_TO_MESH
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:VOLUME_TO_MESH 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-00107-modifier-VOLUME_TO_MESH.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00107.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-00107.py -- tests/files/web/generated/M16-GAP-00107-modifier-VOLUME_TO_MESH.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00107
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00107
|
||||||
|
|
||||||
|
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-00107/`
|
||||||
|
- Status: `docs/status/M16-GAP-00107.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00107/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00107 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00108.md
Normal file
37
docs/tasks/M16-GAP-00108.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00108: modifier:WARP LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00108
|
||||||
|
- parent: M16-GAP-00107
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:WARP
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:WARP 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-00108-modifier-WARP.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00108.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-00108.py -- tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00108
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00108
|
||||||
|
|
||||||
|
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-00108/`
|
||||||
|
- Status: `docs/status/M16-GAP-00108.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00108/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00108 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00109.md
Normal file
37
docs/tasks/M16-GAP-00109.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00109: modifier:WAVE LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00109
|
||||||
|
- parent: M16-GAP-00108
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:WAVE
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:WAVE 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-00109-modifier-WAVE.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00109.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-00109.py -- tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00109
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00109
|
||||||
|
|
||||||
|
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-00109/`
|
||||||
|
- Status: `docs/status/M16-GAP-00109.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00109/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00109 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00110.md
Normal file
37
docs/tasks/M16-GAP-00110.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00110: modifier:WEIGHTED_NORMAL LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00110
|
||||||
|
- parent: M16-GAP-00109
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:WEIGHTED_NORMAL
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:WEIGHTED_NORMAL 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-00110-modifier-WEIGHTED_NORMAL.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00110.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-00110.py -- tests/files/web/generated/M16-GAP-00110-modifier-WEIGHTED_NORMAL.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00110
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00110
|
||||||
|
|
||||||
|
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-00110/`
|
||||||
|
- Status: `docs/status/M16-GAP-00110.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00110/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00110 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00111.md
Normal file
37
docs/tasks/M16-GAP-00111.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00111: modifier:WELD LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00111
|
||||||
|
- parent: M16-GAP-00110
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:WELD
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:WELD 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-00111-modifier-WELD.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00111.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-00111.py -- tests/files/web/generated/M16-GAP-00111-modifier-WELD.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00111
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00111
|
||||||
|
|
||||||
|
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-00111/`
|
||||||
|
- Status: `docs/status/M16-GAP-00111.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00111/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00111 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00112.md
Normal file
37
docs/tasks/M16-GAP-00112.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00112: modifier:WIREFRAME LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00112
|
||||||
|
- parent: M16-GAP-00111
|
||||||
|
- status: in_progress
|
||||||
|
- gap: modifier:WIREFRAME
|
||||||
|
- ownerFamily: MODIFIER
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable modifier:WIREFRAME 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-00112-modifier-WIREFRAME.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00112.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-00112.py -- tests/files/web/generated/M16-GAP-00112-modifier-WIREFRAME.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00112
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00112
|
||||||
|
|
||||||
|
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-00112/`
|
||||||
|
- Status: `docs/status/M16-GAP-00112.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00112/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00112 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00113.md
Normal file
37
docs/tasks/M16-GAP-00113.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00113: operator:action.bake_keys LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00113
|
||||||
|
- parent: M16-GAP-00112
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.bake_keys
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.bake_keys data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.
|
||||||
|
|
||||||
|
## 输入与范围
|
||||||
|
|
||||||
|
- Fixture: `tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00113.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-00113.py -- tests/files/web/generated/M16-GAP-00113-operator-action.bake_keys.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00113
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00113
|
||||||
|
|
||||||
|
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-00113/`
|
||||||
|
- Status: `docs/status/M16-GAP-00113.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00113/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00113 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00114.md
Normal file
37
docs/tasks/M16-GAP-00114.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00114: operator:action.clean LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00114
|
||||||
|
- parent: M16-GAP-00113
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.clean
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.clean 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-00114-operator-action.clean.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00114.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-00114.py -- tests/files/web/generated/M16-GAP-00114-operator-action.clean.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00114
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00114
|
||||||
|
|
||||||
|
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-00114/`
|
||||||
|
- Status: `docs/status/M16-GAP-00114.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00114/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00114 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00115.md
Normal file
37
docs/tasks/M16-GAP-00115.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00115: operator:action.clickselect LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00115
|
||||||
|
- parent: M16-GAP-00114
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.clickselect
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.clickselect 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-00115-operator-action.clickselect.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00115.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-00115.py -- tests/files/web/generated/M16-GAP-00115-operator-action.clickselect.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00115
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00115
|
||||||
|
|
||||||
|
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-00115/`
|
||||||
|
- Status: `docs/status/M16-GAP-00115.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00115/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00115 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00116.md
Normal file
37
docs/tasks/M16-GAP-00116.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00116: operator:action.copy LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00116
|
||||||
|
- parent: M16-GAP-00115
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.copy
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.copy 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-00116-operator-action.copy.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00116.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-00116.py -- tests/files/web/generated/M16-GAP-00116-operator-action.copy.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00116
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00116
|
||||||
|
|
||||||
|
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-00116/`
|
||||||
|
- Status: `docs/status/M16-GAP-00116.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00116/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00116 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00117.md
Normal file
37
docs/tasks/M16-GAP-00117.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00117: operator:action.delete LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00117
|
||||||
|
- parent: M16-GAP-00116
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.delete
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.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-00117-operator-action.delete.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00117.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-00117.py -- tests/files/web/generated/M16-GAP-00117-operator-action.delete.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00117
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00117
|
||||||
|
|
||||||
|
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-00117/`
|
||||||
|
- Status: `docs/status/M16-GAP-00117.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00117/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00117 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00118.md
Normal file
37
docs/tasks/M16-GAP-00118.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00118: operator:action.duplicate LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00118
|
||||||
|
- parent: M16-GAP-00117
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.duplicate
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.duplicate 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-00118-operator-action.duplicate.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00118.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-00118.py -- tests/files/web/generated/M16-GAP-00118-operator-action.duplicate.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00118
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00118
|
||||||
|
|
||||||
|
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-00118/`
|
||||||
|
- Status: `docs/status/M16-GAP-00118.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00118/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00118 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00119.md
Normal file
37
docs/tasks/M16-GAP-00119.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00119: operator:action.duplicate_move LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00119
|
||||||
|
- parent: M16-GAP-00118
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.duplicate_move
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.duplicate_move data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.
|
||||||
|
|
||||||
|
## 输入与范围
|
||||||
|
|
||||||
|
- Fixture: `tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00119.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-00119.py -- tests/files/web/generated/M16-GAP-00119-operator-action.duplicate_move.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00119
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00119
|
||||||
|
|
||||||
|
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-00119/`
|
||||||
|
- Status: `docs/status/M16-GAP-00119.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00119/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00119 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00120.md
Normal file
37
docs/tasks/M16-GAP-00120.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00120: operator:action.easing_type LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00120
|
||||||
|
- parent: M16-GAP-00119
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.easing_type
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.easing_type 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-00120-operator-action.easing_type.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00120.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-00120.py -- tests/files/web/generated/M16-GAP-00120-operator-action.easing_type.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00120
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00120
|
||||||
|
|
||||||
|
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-00120/`
|
||||||
|
- Status: `docs/status/M16-GAP-00120.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00120/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00120 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00121.md
Normal file
37
docs/tasks/M16-GAP-00121.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00121: operator:action.extrapolation_type LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00121
|
||||||
|
- parent: M16-GAP-00120
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.extrapolation_type
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.extrapolation_type 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-00121-operator-action.extrapolation_type.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00121.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-00121.py -- tests/files/web/generated/M16-GAP-00121-operator-action.extrapolation_type.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00121
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00121
|
||||||
|
|
||||||
|
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-00121/`
|
||||||
|
- Status: `docs/status/M16-GAP-00121.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00121/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00121 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00122.md
Normal file
37
docs/tasks/M16-GAP-00122.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00122: operator:action.frame_jump LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00122
|
||||||
|
- parent: M16-GAP-00121
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.frame_jump
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.frame_jump 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-00122-operator-action.frame_jump.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00122.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-00122.py -- tests/files/web/generated/M16-GAP-00122-operator-action.frame_jump.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00122
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00122
|
||||||
|
|
||||||
|
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-00122/`
|
||||||
|
- Status: `docs/status/M16-GAP-00122.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00122/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00122 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00123.md
Normal file
37
docs/tasks/M16-GAP-00123.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00123: operator:action.handle_type LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00123
|
||||||
|
- parent: M16-GAP-00122
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.handle_type
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.handle_type 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-00123-operator-action.handle_type.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00123.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-00123.py -- tests/files/web/generated/M16-GAP-00123-operator-action.handle_type.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00123
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00123
|
||||||
|
|
||||||
|
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-00123/`
|
||||||
|
- Status: `docs/status/M16-GAP-00123.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00123/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00123 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00124.md
Normal file
37
docs/tasks/M16-GAP-00124.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00124: operator:action.interpolation_type LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00124
|
||||||
|
- parent: M16-GAP-00123
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.interpolation_type
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.interpolation_type 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-00124-operator-action.interpolation_type.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00124.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-00124.py -- tests/files/web/generated/M16-GAP-00124-operator-action.interpolation_type.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00124
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00124
|
||||||
|
|
||||||
|
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-00124/`
|
||||||
|
- Status: `docs/status/M16-GAP-00124.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00124/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00124 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00125.md
Normal file
37
docs/tasks/M16-GAP-00125.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00125: operator:action.keyframe_insert LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00125
|
||||||
|
- parent: M16-GAP-00124
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.keyframe_insert
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.keyframe_insert 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-00125-operator-action.keyframe_insert.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00125.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-00125.py -- tests/files/web/generated/M16-GAP-00125-operator-action.keyframe_insert.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00125
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00125
|
||||||
|
|
||||||
|
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-00125/`
|
||||||
|
- Status: `docs/status/M16-GAP-00125.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00125/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00125 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00126.md
Normal file
37
docs/tasks/M16-GAP-00126.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00126: operator:action.keyframe_type LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00126
|
||||||
|
- parent: M16-GAP-00125
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.keyframe_type
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.keyframe_type 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-00126-operator-action.keyframe_type.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00126.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-00126.py -- tests/files/web/generated/M16-GAP-00126-operator-action.keyframe_type.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00126
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00126
|
||||||
|
|
||||||
|
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-00126/`
|
||||||
|
- Status: `docs/status/M16-GAP-00126.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00126/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00126 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00127.md
Normal file
37
docs/tasks/M16-GAP-00127.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00127: operator:action.markers_make_local LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00127
|
||||||
|
- parent: M16-GAP-00126
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.markers_make_local
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.markers_make_local 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-00127-operator-action.markers_make_local.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00127.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-00127.py -- tests/files/web/generated/M16-GAP-00127-operator-action.markers_make_local.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00127
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00127
|
||||||
|
|
||||||
|
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-00127/`
|
||||||
|
- Status: `docs/status/M16-GAP-00127.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00127/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00127 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00128.md
Normal file
37
docs/tasks/M16-GAP-00128.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00128: operator:action.mirror LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00128
|
||||||
|
- parent: M16-GAP-00127
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.mirror
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.mirror 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-00128-operator-action.mirror.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00128.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-00128.py -- tests/files/web/generated/M16-GAP-00128-operator-action.mirror.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00128
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00128
|
||||||
|
|
||||||
|
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-00128/`
|
||||||
|
- Status: `docs/status/M16-GAP-00128.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00128/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00128 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00129.md
Normal file
37
docs/tasks/M16-GAP-00129.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00129: operator:action.new LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00129
|
||||||
|
- parent: M16-GAP-00128
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.new
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.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-00129-operator-action.new.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00129.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-00129.py -- tests/files/web/generated/M16-GAP-00129-operator-action.new.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00129
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00129
|
||||||
|
|
||||||
|
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-00129/`
|
||||||
|
- Status: `docs/status/M16-GAP-00129.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00129/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00129 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00130.md
Normal file
37
docs/tasks/M16-GAP-00130.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00130: operator:action.paste LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00130
|
||||||
|
- parent: M16-GAP-00129
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.paste
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.paste 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-00130-operator-action.paste.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00130.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-00130.py -- tests/files/web/generated/M16-GAP-00130-operator-action.paste.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00130
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00130
|
||||||
|
|
||||||
|
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-00130/`
|
||||||
|
- Status: `docs/status/M16-GAP-00130.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00130/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00130 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00131.md
Normal file
37
docs/tasks/M16-GAP-00131.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00131: operator:action.previewrange_set LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00131
|
||||||
|
- parent: M16-GAP-00130
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.previewrange_set
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.previewrange_set 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-00131-operator-action.previewrange_set.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00131.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-00131.py -- tests/files/web/generated/M16-GAP-00131-operator-action.previewrange_set.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00131
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00131
|
||||||
|
|
||||||
|
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-00131/`
|
||||||
|
- Status: `docs/status/M16-GAP-00131.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00131/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00131 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00132.md
Normal file
37
docs/tasks/M16-GAP-00132.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00132: operator:action.push_down LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00132
|
||||||
|
- parent: M16-GAP-00131
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.push_down
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.push_down 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-00132-operator-action.push_down.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00132.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-00132.py -- tests/files/web/generated/M16-GAP-00132-operator-action.push_down.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00132
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00132
|
||||||
|
|
||||||
|
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-00132/`
|
||||||
|
- Status: `docs/status/M16-GAP-00132.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00132/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00132 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00133.md
Normal file
37
docs/tasks/M16-GAP-00133.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00133: operator:action.select_all LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00133
|
||||||
|
- parent: M16-GAP-00132
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.select_all
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.select_all data in Blender desktop and WASM/Main, with save/reopen stability. Change only this gap; do not expand to other data-blocks, editors, or browsers.
|
||||||
|
|
||||||
|
## 输入与范围
|
||||||
|
|
||||||
|
- Fixture: `tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00133.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-00133.py -- tests/files/web/generated/M16-GAP-00133-operator-action.select_all.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00133
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00133
|
||||||
|
|
||||||
|
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-00133/`
|
||||||
|
- Status: `docs/status/M16-GAP-00133.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00133/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00133 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00134.md
Normal file
37
docs/tasks/M16-GAP-00134.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00134: operator:action.select_box LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00134
|
||||||
|
- parent: M16-GAP-00133
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.select_box
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.select_box 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-00134-operator-action.select_box.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00134.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-00134.py -- tests/files/web/generated/M16-GAP-00134-operator-action.select_box.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00134
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00134
|
||||||
|
|
||||||
|
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-00134/`
|
||||||
|
- Status: `docs/status/M16-GAP-00134.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00134/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00134 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00135.md
Normal file
37
docs/tasks/M16-GAP-00135.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00135: operator:action.select_by_type LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00135
|
||||||
|
- parent: M16-GAP-00134
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.select_by_type
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.select_by_type 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-00135-operator-action.select_by_type.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00135.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-00135.py -- tests/files/web/generated/M16-GAP-00135-operator-action.select_by_type.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00135
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00135
|
||||||
|
|
||||||
|
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-00135/`
|
||||||
|
- Status: `docs/status/M16-GAP-00135.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00135/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00135 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
37
docs/tasks/M16-GAP-00136.md
Normal file
37
docs/tasks/M16-GAP-00136.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# M16-GAP-00136: operator:action.select_circle LOCAL_EXACT slice
|
||||||
|
|
||||||
|
- task: M16-GAP-00136
|
||||||
|
- parent: M16-GAP-00135
|
||||||
|
- status: in_progress
|
||||||
|
- gap: operator:action.select_circle
|
||||||
|
- ownerFamily: OPERATOR
|
||||||
|
- targetImplementationClass: LOCAL_EXACT
|
||||||
|
|
||||||
|
## 目标
|
||||||
|
|
||||||
|
Make the same minimal fixture produce observable operator:action.select_circle 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-00136-operator-action.select_circle.blend`
|
||||||
|
- Generator: `tools/web/generated/M16-GAP-00136.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-00136.py -- tests/files/web/generated/M16-GAP-00136-operator-action.select_circle.blend
|
||||||
|
npm --prefix web run test:generated-gap -- --task M16-GAP-00136
|
||||||
|
node tools/web/check-generated-gap.mjs --task M16-GAP-00136
|
||||||
|
|
||||||
|
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-00136/`
|
||||||
|
- Status: `docs/status/M16-GAP-00136.md`
|
||||||
|
- Manifest: `tests/golden/M16-GAP-00136/manifest.json`
|
||||||
|
- Handoff: `node tools/web/check-task-context.mjs --task M16-GAP-00136 --write`
|
||||||
|
- Rollback: remove this task production entry, fixture, tests, reports, manifest, status, and context; restore the parent as queue tail without rewriting parent evidence.
|
||||||
BIN
tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend
Normal file
BIN
tests/files/web/generated/M16-GAP-00096-modifier-SOLIDIFY.blend
Normal file
Binary file not shown.
BIN
tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend
Normal file
BIN
tests/files/web/generated/M16-GAP-00097-modifier-SUBSURF.blend
Normal file
Binary file not shown.
BIN
tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend
Normal file
BIN
tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend
Normal file
BIN
tests/files/web/generated/M16-GAP-00102-modifier-UV_WARP.blend
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend
Normal file
BIN
tests/files/web/generated/M16-GAP-00108-modifier-WARP.blend
Normal file
Binary file not shown.
BIN
tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend
Normal file
BIN
tests/files/web/generated/M16-GAP-00109-modifier-WAVE.blend
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user