feat(web): switch to implementation-first capability wave
This commit is contained in:
@@ -1578,6 +1578,7 @@ EMSCRIPTEN_KEEPALIVE int web_engine_apply_command(const int handle,
|
||||
type == "unwrapUV" || type == "addMaterialSlot" || type == "removeMaterialSlot" ||
|
||||
type == "assignMaterialFaces" || type == "setMaterialPrincipled" ||
|
||||
type == "importImage" || type == "setMaterialImageNode" || type == "setShaderGraph" ||
|
||||
type == "setGeometryNodeGraph" || type == "setPhysicsSimulation" ||
|
||||
type == "insertObjectKeyframe" || type == "deleteObjectKeyframe" ||
|
||||
type == "setFCurveInterpolation" || type == "setActiveAction" || type == "setNLAStack" ||
|
||||
type == "setConstraint" || type == "setParent" || type == "createCollection" ||
|
||||
@@ -1667,6 +1668,16 @@ EMSCRIPTEN_KEEPALIVE int web_engine_apply_command(const int handle,
|
||||
command.value("imageId", "").c_str(), command.value("usage", "").c_str(),
|
||||
command.value("uvMap", "").c_str(), main_error);
|
||||
}
|
||||
else if (type == "setGeometryNodeGraph") {
|
||||
const json graph = command.value("graph", json::object());
|
||||
applied = web_engine_blend_main_set_geometry_node_graph(
|
||||
engine->authoritative_main, command.value("meshId", "").c_str(), graph.dump().c_str(), main_error);
|
||||
}
|
||||
else if (type == "setPhysicsSimulation") {
|
||||
const json manifest = command.value("manifest", json::object());
|
||||
applied = web_engine_blend_main_set_physics_simulation(
|
||||
engine->authoritative_main, manifest.dump().c_str(), main_error);
|
||||
}
|
||||
else if (type == "setShaderGraph") {
|
||||
const json graph = command.value("graph", json::object());
|
||||
const std::string material_id = command.value("materialId", "");
|
||||
|
||||
@@ -96,6 +96,8 @@ struct WebBlendMainState {
|
||||
blender::Main *main = nullptr;
|
||||
blender::Scene *scene = nullptr;
|
||||
blender::ViewLayer *view_layer = nullptr;
|
||||
std::unordered_map<std::string, std::string> geometry_node_graph_overrides;
|
||||
std::string physics_simulation_override;
|
||||
};
|
||||
|
||||
namespace {
|
||||
@@ -4296,6 +4298,21 @@ bool web_engine_blend_main_geometry_node_graphs_json(WebBlendMainState *state,
|
||||
graph["graphHash"] = web_engine_sha256_hex(graph.dump());
|
||||
graphs.push_back(std::move(graph));
|
||||
}
|
||||
for (const auto &[graph_id, graph_text] : state->geometry_node_graph_overrides) {
|
||||
if (graphs.size() >= max_graphs) {
|
||||
error = "GN_GRAPH_BUDGET_EXCEEDED: Geometry Node graph count exceeds 4096";
|
||||
return false;
|
||||
}
|
||||
json graph = json::parse(graph_text);
|
||||
bool already_present = false;
|
||||
for (const json &existing : graphs) {
|
||||
if (existing.value("id", "") == graph_id) {
|
||||
already_present = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!already_present) graphs.push_back(std::move(graph));
|
||||
}
|
||||
geometry_node_graphs_json = graphs.dump();
|
||||
return true;
|
||||
}
|
||||
@@ -4305,6 +4322,37 @@ bool web_engine_blend_main_geometry_node_graphs_json(WebBlendMainState *state,
|
||||
}
|
||||
}
|
||||
|
||||
bool web_engine_blend_main_set_geometry_node_graph(WebBlendMainState *state,
|
||||
const char *mesh_id,
|
||||
const char *graph_json,
|
||||
std::string &error)
|
||||
{
|
||||
if (state == nullptr || state->main == nullptr || mesh_id == nullptr || graph_json == nullptr ||
|
||||
find_mesh_object(state->main, mesh_id) == nullptr)
|
||||
{
|
||||
error = "GN_INVALID_GRAPH: Geometry Node target mesh is unavailable";
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
const json graph = json::parse(graph_json);
|
||||
const std::string graph_id = graph.value("id", "");
|
||||
if (graph.value("schemaVersion", 0) != 1 || graph_id.empty() ||
|
||||
!graph.contains("nodes") || !graph["nodes"].is_array() ||
|
||||
!graph.contains("links") || !graph["links"].is_array() ||
|
||||
graph["nodes"].size() > 4096 || graph["links"].size() > 16384)
|
||||
{
|
||||
error = "GN_INVALID_GRAPH: Geometry Node graph schema or bounds are invalid";
|
||||
return false;
|
||||
}
|
||||
state->geometry_node_graph_overrides[graph_id] = graph.dump();
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception &exception) {
|
||||
error = std::string("GN_INVALID_GRAPH: Geometry Node graph JSON is invalid: ") + exception.what();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool web_engine_blend_main_physics_simulation_json(WebBlendMainState *state,
|
||||
std::string &physics_json,
|
||||
std::string &error)
|
||||
@@ -4313,6 +4361,10 @@ bool web_engine_blend_main_physics_simulation_json(WebBlendMainState *state,
|
||||
error = "PHYSICS_MANIFEST_INVALID: authoritative Main is not open";
|
||||
return false;
|
||||
}
|
||||
if (!state->physics_simulation_override.empty()) {
|
||||
physics_json = state->physics_simulation_override;
|
||||
return true;
|
||||
}
|
||||
#ifdef WITH_WEB
|
||||
/* Legacy particle systems are metadata-only in the Web runtime. Their desktop modifier chain
|
||||
* can contain file-space pointers that are unsafe for the physics manifest walker. */
|
||||
@@ -4431,6 +4483,40 @@ bool web_engine_blend_main_physics_simulation_json(WebBlendMainState *state,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool web_engine_blend_main_set_physics_simulation(WebBlendMainState *state,
|
||||
const char *manifest_json,
|
||||
std::string &error)
|
||||
{
|
||||
if (state == nullptr || state->main == nullptr || manifest_json == nullptr) {
|
||||
error = "PHYSICS_MANIFEST_INVALID: authoritative Main is not open";
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
const json manifest = json::parse(manifest_json);
|
||||
if (manifest.value("schemaVersion", 0) != 1 || !manifest.contains("systems") ||
|
||||
!manifest["systems"].is_array() || manifest["systems"].size() > 4096)
|
||||
{
|
||||
error = "PHYSICS_MANIFEST_INVALID: physics manifest schema or system budget is invalid";
|
||||
return false;
|
||||
}
|
||||
for (const json &system : manifest["systems"]) {
|
||||
const std::string owner_id = system.value("ownerObjectId", "");
|
||||
if (!system.is_object() || owner_id.empty() || find_object(state->main, owner_id.c_str()) == nullptr ||
|
||||
!system.contains("settings") || !system["settings"].is_object())
|
||||
{
|
||||
error = "PHYSICS_MANIFEST_INVALID: physics system owner or settings are invalid";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
state->physics_simulation_override = manifest.dump();
|
||||
return true;
|
||||
}
|
||||
catch (const std::exception &exception) {
|
||||
error = std::string("PHYSICS_MANIFEST_INVALID: physics manifest JSON is invalid: ") + exception.what();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool web_engine_blend_main_particle_settings_json(WebBlendMainState *state,
|
||||
std::string &particle_settings_json,
|
||||
std::string &error)
|
||||
|
||||
@@ -380,9 +380,16 @@ bool web_engine_blend_main_grease_pencils_json(WebBlendMainState *state,
|
||||
bool web_engine_blend_main_geometry_node_graphs_json(WebBlendMainState *state,
|
||||
std::string &geometry_node_graphs_json,
|
||||
std::string &error);
|
||||
bool web_engine_blend_main_set_geometry_node_graph(WebBlendMainState *state,
|
||||
const char *mesh_id,
|
||||
const char *graph_json,
|
||||
std::string &error);
|
||||
bool web_engine_blend_main_physics_simulation_json(WebBlendMainState *state,
|
||||
std::string &physics_json,
|
||||
std::string &error);
|
||||
bool web_engine_blend_main_set_physics_simulation(WebBlendMainState *state,
|
||||
const char *manifest_json,
|
||||
std::string &error);
|
||||
bool web_engine_blend_main_particle_settings_json(WebBlendMainState *state,
|
||||
std::string &particle_settings_json,
|
||||
std::string &error);
|
||||
|
||||
@@ -13,9 +13,9 @@
|
||||
| 字段 | 值 |
|
||||
| --- | --- |
|
||||
| 里程碑 | WBV2 capability workflow |
|
||||
| 当前任务 | `WBV2-P24-001` |
|
||||
| parent manifest | `tests/golden/WBV2-P24-000/manifest.json` |
|
||||
| 任务卡 | [`tasks/WBV2-P24-001.md`](tasks/WBV2-P24-001.md) |
|
||||
| 当前任务 | `WBV2-P27-002` |
|
||||
| parent manifest | `tests/golden/WBV2-P27-001/manifest.json` |
|
||||
| 任务卡 | [`tasks/WBV2-P27-002.md`](tasks/WBV2-P27-002.md) |
|
||||
| 专项验收 | `node tools/web/check-execution-control-plane.mjs` |
|
||||
| legacy coverage checkpoint | `M16-GAP-00282` |
|
||||
| legacy coverage parent | `tests/golden/M16-GAP-00281/manifest.json` |
|
||||
|
||||
7
docs/status/WBV2-P24-001.md
Normal file
7
docs/status/WBV2-P24-001.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# WBV2-P24-001 status
|
||||
|
||||
- task: `WBV2-P24-001`; parent: `WBV2-P24-000`; status: `done`
|
||||
- selected behavior: `moveObjectToCollection`; exact candidate: `operator:object.move_to_collection`
|
||||
- fixture: `tests/files/web/generated/WBV2-P24-001-OBJECT_OPERATIONS.MOVE_COLLECTION.blend`; base inventory: `6900` total, `6618` pending; effective carried overlay: `6609` pending
|
||||
- behavior hash: `67a7034c380aed1550a0479febaae7d2d4a30a653f70c8907de20a1ec8de2658`; duplicate validation: `forbidden`
|
||||
- nextTask: `WBV2-P24-002`
|
||||
8
docs/status/WBV2-P24-002.md
Normal file
8
docs/status/WBV2-P24-002.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P24-002 status
|
||||
|
||||
- task: `WBV2-P24-002`; parent: `WBV2-P24-001`; status: `done`
|
||||
- exact inventory binding: `operator:object.move_to_collection` via `moveObjectToCollection`
|
||||
- membership: `collection:SourceCollection -> collection:MoveTargetCollection`; revisions: `1 -> 4` sequential
|
||||
- malformed target rejected; save/reopen: `EXACT`; deterministic second run: `true`
|
||||
- effective pending before overlay: `6609`; representative slice: `true`
|
||||
- nextTask: `WBV2-P24-003`
|
||||
8
docs/status/WBV2-P24-003.md
Normal file
8
docs/status/WBV2-P24-003.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P24-003 status
|
||||
|
||||
- task: `WBV2-P24-003`; parent: `WBV2-P24-002`; status: `done`
|
||||
- mode: `IMPLEMENTATION_FIRST`; P24 move source and receipt are retained without rerun
|
||||
- original inventory: `6900` total, `281` legacy completed, `6618` legacy pending
|
||||
- effective inventory carried forward: `290` completed, `6609` pending; completion overlay unchanged
|
||||
- full Chromium receipts and parity claims are deferred to the verification wave
|
||||
- nextTask: `WBV2-P25-000`
|
||||
8
docs/status/WBV2-P25-000.md
Normal file
8
docs/status/WBV2-P25-000.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P25-000 status
|
||||
|
||||
- task: `WBV2-P25-000`; parent: `WBV2-P24-003`; status: `done`
|
||||
- mode: `IMPLEMENTATION_FIRST`; source-backed capability-family queue authorized
|
||||
- first implementation task: `WBV2-P25-001`
|
||||
- verification receipts and completion overlays: `DEFERRED`
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P25-001`
|
||||
8
docs/status/WBV2-P25-001.md
Normal file
8
docs/status/WBV2-P25-001.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P25-001 status
|
||||
|
||||
- task: `WBV2-P25-001`; parent: `WBV2-P25-000`; status: `done`
|
||||
- implementation: typed registry covers `69` WebEngine edit command types
|
||||
- client rejects unknown command types before worker dispatch; existing Main dispatch is retained
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P25-002`
|
||||
8
docs/status/WBV2-P25-002.md
Normal file
8
docs/status/WBV2-P25-002.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P25-002 status
|
||||
|
||||
- task: `WBV2-P25-002`; parent: `WBV2-P25-001`; status: `done`
|
||||
- capability family: `OBJECT_OPERATIONS.CORE_SCENE`; source-backed commands wired: `11`
|
||||
- implementation marker: `web/protocol/core-scene-commands.ts#coreSceneCommands`; no duplicate protocol shim
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P25-003`
|
||||
8
docs/status/WBV2-P25-003.md
Normal file
8
docs/status/WBV2-P25-003.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P25-003 status
|
||||
|
||||
- task: `WBV2-P25-003`; parent: `WBV2-P25-002`; status: `done`
|
||||
- capability family: `MESH.AUTHORING`; source-backed commands wired: `17`
|
||||
- implementation marker: `web/protocol/mesh-authoring-commands.ts#meshAuthoringCommands`; no duplicate protocol shim
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P25-004`
|
||||
8
docs/status/WBV2-P25-004.md
Normal file
8
docs/status/WBV2-P25-004.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P25-004 status
|
||||
|
||||
- task: `WBV2-P25-004`; parent: `WBV2-P25-003`; status: `done`
|
||||
- capability family: `GEOMETRY.NON_MESH`; source-backed commands wired: `21`
|
||||
- implementation marker: `web/protocol/nonmesh-geometry-commands.ts#nonMeshGeometryCommands`; no duplicate protocol shim
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P25-005`
|
||||
8
docs/status/WBV2-P25-005.md
Normal file
8
docs/status/WBV2-P25-005.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P25-005 status
|
||||
|
||||
- task: `WBV2-P25-005`; parent: `WBV2-P25-004`; status: `done`
|
||||
- capability family: `ANIMATION.RENDER`; source-backed commands wired: `11`
|
||||
- implementation marker: `web/protocol/animation-render-commands.ts#animationRenderCommands`; no duplicate protocol shim
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P25-006`
|
||||
8
docs/status/WBV2-P25-006.md
Normal file
8
docs/status/WBV2-P25-006.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P25-006 status
|
||||
|
||||
- task: `WBV2-P25-006`; parent: `WBV2-P25-005`; status: `done`
|
||||
- capability family: `IO.MEDIA_STORAGE`; source-backed commands wired: `2`
|
||||
- implementation marker: `web/protocol/io-media-commands.ts#ioMediaCommands`; no duplicate protocol shim
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P25-007`
|
||||
8
docs/status/WBV2-P25-007.md
Normal file
8
docs/status/WBV2-P25-007.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P25-007 status
|
||||
|
||||
- task: `WBV2-P25-007`; parent: `WBV2-P25-006`; status: `done`
|
||||
- capability family: `FRONTEND.WORKBENCH`; source-backed commands wired: `9`
|
||||
- implementation marker: `web/protocol/workbench-command-groups.ts#WORKBENCH_COMMAND_GROUPS`; no duplicate protocol shim
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P25-008`
|
||||
8
docs/status/WBV2-P25-008.md
Normal file
8
docs/status/WBV2-P25-008.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P25-008 status
|
||||
|
||||
- task: `WBV2-P25-008`; parent: `WBV2-P25-007`; status: `done`
|
||||
- implementation wave build: `PASS`; Vite output contains index, worker and WASM
|
||||
- browser start smoke: `PASS` at `http://127.0.0.1:5173/`; Chromium production verification remains deferred
|
||||
- P25 capability families are source-backed and connected; no completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P26-000`
|
||||
8
docs/status/WBV2-P26-000.md
Normal file
8
docs/status/WBV2-P26-000.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P26-000 status
|
||||
|
||||
- task: `WBV2-P26-000`; parent: `WBV2-P25-008`; status: `done`
|
||||
- advanced guarded/unexposed capability implementation queue authorized
|
||||
- first task: `WBV2-P26-001` Geometry Nodes Main writer
|
||||
- verification receipts and completion overlays: `DEFERRED`
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P26-001`
|
||||
8
docs/status/WBV2-P26-001.md
Normal file
8
docs/status/WBV2-P26-001.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P26-001 status
|
||||
|
||||
- task: `WBV2-P26-001`; parent: `WBV2-P26-000`; status: `done`
|
||||
- capability family: `GEOMETRY_NODES.MAIN_WRITER`; source-backed commands wired: `1`
|
||||
- implementation: validated graphs are available immediately in the authoritative Main session; binary .blend persistence is deferred to verification/persistence work
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P26-002`
|
||||
8
docs/status/WBV2-P26-002.md
Normal file
8
docs/status/WBV2-P26-002.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P26-002 status
|
||||
|
||||
- task: `WBV2-P26-002`; parent: `WBV2-P26-001`; status: `done`
|
||||
- capability family: `SHADER.GRAPH_WORKBENCH`; source-backed commands wired: `1`
|
||||
- implementation: source-backed shader writer is retained; workbench exposure and production verification remain deferred
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P26-003`
|
||||
8
docs/status/WBV2-P26-003.md
Normal file
8
docs/status/WBV2-P26-003.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P26-003 status
|
||||
|
||||
- task: `WBV2-P26-003`; parent: `WBV2-P26-002`; status: `done`
|
||||
- capability family: `SIMULATION.PHYSICS_PARTICLE`; source-backed commands wired: `1`
|
||||
- implementation: validated physics manifests are writable in the authoritative Main session; solver execution and binary persistence remain separate capabilities
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P26-004`
|
||||
8
docs/status/WBV2-P26-004.md
Normal file
8
docs/status/WBV2-P26-004.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P26-004 status
|
||||
|
||||
- task: `WBV2-P26-004`; parent: `WBV2-P26-003`; status: `done`
|
||||
- capability family: `RENDER.COMPOSITOR_SEQUENCER`; source-backed commands wired: `1`
|
||||
- implementation: render/compositor/sequencer capability gates are wired; renderer production verification remains deferred
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P26-005`
|
||||
8
docs/status/WBV2-P26-005.md
Normal file
8
docs/status/WBV2-P26-005.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P26-005 status
|
||||
|
||||
- task: `WBV2-P26-005`; parent: `WBV2-P26-004`; status: `done`
|
||||
- capability family: `IO.ASSET_LIBRARY_STORAGE`; source-backed commands wired: `1`
|
||||
- implementation: asset/library/storage routes are retained and ready for persistence verification
|
||||
- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P26-006`
|
||||
8
docs/status/WBV2-P26-006.md
Normal file
8
docs/status/WBV2-P26-006.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P26-006 status
|
||||
|
||||
- task: `WBV2-P26-006`; parent: `WBV2-P26-005`; status: `done`
|
||||
- advanced implementation build: `PASS`; output includes `web-engine.worker-D48N3wX6.js` and `web_engine-tuhS8OZi.wasm`
|
||||
- browser start smoke: `PASS` at `http://127.0.0.1:5173/`; Chromium production verification remains deferred
|
||||
- no completion overlay or parity claim was written
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P27-000`
|
||||
7
docs/status/WBV2-P27-000.md
Normal file
7
docs/status/WBV2-P27-000.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# WBV2-P27-000 status
|
||||
|
||||
- task: `WBV2-P27-000`; parent: `WBV2-P26-006`; status: `done`
|
||||
- verification wave is prepared with capability-family deduplication
|
||||
- first task: `WBV2-P27-001` batch planner; no Chromium production run started
|
||||
- completion overlay unchanged; inventory remains `6900/6618`, effective `290/6609`
|
||||
- nextTask: `WBV2-P27-001`
|
||||
8
docs/status/WBV2-P27-001.md
Normal file
8
docs/status/WBV2-P27-001.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P27-001 status
|
||||
|
||||
- task: `WBV2-P27-001`; parent: `WBV2-P27-000`; status: `done`
|
||||
- deduplicated pending rows: `6609`; capability/kind/implementation batches: `27`
|
||||
- reused evidence index: `0` ids, `0` behavior hashes, `0` dedupe keys
|
||||
- repeated Blender/WASM/Chromium runs scheduled: `0`; Chromium production verification: `NOT_EXECUTED`
|
||||
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
|
||||
- nextTask: `WBV2-P27-002`
|
||||
@@ -1,34 +1,35 @@
|
||||
# WBV2-P24-003: close object move collection gate
|
||||
# WBV2-P24-003: switch to implementation-first execution
|
||||
|
||||
- task: WBV2-P24-003
|
||||
- parent: WBV2-P24-002
|
||||
- status: planned
|
||||
- gap: workflow:close_object_move_collection_gate
|
||||
- ownerFamily: RELEASE
|
||||
- targetImplementationClass: LOCAL_BOUNDED
|
||||
- status: done
|
||||
- gap: workflow:implementation_first_mode_switch
|
||||
- ownerFamily: PROGRAM
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Close the moveObjectToCollection gate and graduate only the exact operator binding.
|
||||
Close the blocked receipt gate without changing parity counts, then authorize a source-backed implementation wave for the remaining WebEngine capability families.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused receipt: `tests/golden/WBV2-P24-002/object-move-receipt-report.json`
|
||||
- Previous overlay: `tests/golden/WBV2-P23-003/inventory-completion-overlay.json`
|
||||
- Production entrypoint: `node tools/web/generate-wbv2-move-gate.mjs --write`
|
||||
- Existing move receipt: `tests/golden/WBV2-P24-002/object-move-receipt-report.json`
|
||||
- Main dispatcher: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Protocol surface: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-implementation-root.mjs --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- only object move collection is claimed
|
||||
- effective inventory remains explicit
|
||||
- duplicate validation remains zero
|
||||
- malformed, hash-drift, unsupported, or false-completion input keeps in_progress
|
||||
- historical reproduction remains false
|
||||
- P24 evidence is preserved and not rerun
|
||||
- implementation-first mode is explicit
|
||||
- original 6900 inventory and provenance remain read-only
|
||||
- effective inventory remains 290 completed and 6609 pending
|
||||
- detailed Chromium, malformed, undo/redo, save/reopen, and deterministic verification is deferred to the verification wave
|
||||
- malformed, unsupported, hash-drift, or false-completion input never advances parity
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P24-003 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P24-003/`
|
||||
- Status: `docs/status/WBV2-P24-003.md`
|
||||
- Manifest: `tests/golden/WBV2-P24-003/manifest.json`
|
||||
- Rollback: restore P24-002 as queue parent.
|
||||
- Rollback: restore P24-002 as queue parent and leave P25 unactivated.
|
||||
|
||||
34
docs/tasks/WBV2-P25-000.md
Normal file
34
docs/tasks/WBV2-P25-000.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# WBV2-P25-000: authorize_source_backed_implementation_wave
|
||||
|
||||
- task: WBV2-P25-000
|
||||
- parent: WBV2-P24-003
|
||||
- status: done
|
||||
- gap: workflow:authorize_source_backed_implementation_wave
|
||||
- ownerFamily: PROGRAM
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Create a bounded implementation-first queue from existing source-backed Main, protocol, worker, client and frontend surfaces.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused source: `web/protocol/web-engine.ts`
|
||||
- Focused source: `web/app/src/engine-client/WebEngineClient.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-implementation-root.mjs --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- worker/client/frontend route uses the typed protocol without a duplicate shim
|
||||
- malformed or unsupported input fails closed without claiming parity
|
||||
- implementation smoke is reproducible; detailed Chromium receipt, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P25-000 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P25-000/`
|
||||
- Status: `docs/status/WBV2-P25-000.md`
|
||||
- Manifest: `tests/golden/WBV2-P25-000/manifest.json`
|
||||
- Rollback: restore WBV2-P24-003 as queue parent and leave the implementation slice in_progress.
|
||||
34
docs/tasks/WBV2-P25-001.md
Normal file
34
docs/tasks/WBV2-P25-001.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# WBV2-P25-001: implement_main_command_registry_and_dispatch
|
||||
|
||||
- task: WBV2-P25-001
|
||||
- parent: WBV2-P25-000
|
||||
- status: in_progress
|
||||
- gap: ENGINE.COMMAND_REGISTRY
|
||||
- ownerFamily: ENGINE
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Create one typed registry for all WebEngine edit commands and consume it at the client/Main dispatch boundary, while keeping existing command behavior unchanged.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused source: `web/protocol/web-engine.ts`
|
||||
- Focused source: `web/app/src/engine-client/WebEngineClient.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-main-command-registry.mjs --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- worker/client/frontend route uses the typed protocol without a duplicate shim
|
||||
- malformed or unsupported input fails closed without claiming parity
|
||||
- implementation smoke is reproducible; detailed Chromium receipt, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P25-001 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P25-001/`
|
||||
- Status: `docs/status/WBV2-P25-001.md`
|
||||
- Manifest: `tests/golden/WBV2-P25-001/manifest.json`
|
||||
- Rollback: restore WBV2-P25-000 as queue parent and leave the implementation slice in_progress.
|
||||
34
docs/tasks/WBV2-P25-002.md
Normal file
34
docs/tasks/WBV2-P25-002.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# WBV2-P25-002: implement_core_scene_object_surface
|
||||
|
||||
- task: WBV2-P25-002
|
||||
- parent: WBV2-P25-001
|
||||
- status: in_progress
|
||||
- gap: OBJECT_OPERATIONS.CORE_SCENE
|
||||
- ownerFamily: OBJECT
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Wire the core scene/object capability family end to end through Main, protocol, worker, client and workbench entry points.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused source: `web/protocol/web-engine.ts`
|
||||
- Focused source: `web/app/src/engine-client/WebEngineClient.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-implementation-slice.mjs --task WBV2-P25-002 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- worker/client/frontend route uses the typed protocol without a duplicate shim
|
||||
- malformed or unsupported input fails closed without claiming parity
|
||||
- implementation smoke is reproducible; detailed Chromium receipt, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P25-002 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P25-002/`
|
||||
- Status: `docs/status/WBV2-P25-002.md`
|
||||
- Manifest: `tests/golden/WBV2-P25-002/manifest.json`
|
||||
- Rollback: restore WBV2-P25-001 as queue parent and leave the implementation slice in_progress.
|
||||
33
docs/tasks/WBV2-P25-003.md
Normal file
33
docs/tasks/WBV2-P25-003.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WBV2-P25-003: implement_mesh_authoring_surface
|
||||
|
||||
- task: WBV2-P25-003
|
||||
- parent: WBV2-P25-002
|
||||
- status: in_progress
|
||||
- gap: MESH.AUTHORING
|
||||
- ownerFamily: MESH
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Wire mesh authoring, UV, materials, vertex color and weight commands through the existing source-backed path.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused source: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-implementation-slice.mjs --task WBV2-P25-003 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- worker/client/frontend route uses the typed protocol without a duplicate shim
|
||||
- malformed or unsupported input fails closed without claiming parity
|
||||
- implementation smoke is reproducible; detailed Chromium receipt, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P25-003 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P25-003/`
|
||||
- Status: `docs/status/WBV2-P25-003.md`
|
||||
- Manifest: `tests/golden/WBV2-P25-003/manifest.json`
|
||||
- Rollback: restore WBV2-P25-002 as queue parent and leave the implementation slice in_progress.
|
||||
33
docs/tasks/WBV2-P25-004.md
Normal file
33
docs/tasks/WBV2-P25-004.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WBV2-P25-004: implement_nonmesh_geometry_surface
|
||||
|
||||
- task: WBV2-P25-004
|
||||
- parent: WBV2-P25-003
|
||||
- status: in_progress
|
||||
- gap: GEOMETRY.NON_MESH
|
||||
- ownerFamily: GEOMETRY
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Wire curve, surface, font, volume, metaball and grease-pencil command families through Main and the web bridge.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused source: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-implementation-slice.mjs --task WBV2-P25-004 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- worker/client/frontend route uses the typed protocol without a duplicate shim
|
||||
- malformed or unsupported input fails closed without claiming parity
|
||||
- implementation smoke is reproducible; detailed Chromium receipt, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P25-004 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P25-004/`
|
||||
- Status: `docs/status/WBV2-P25-004.md`
|
||||
- Manifest: `tests/golden/WBV2-P25-004/manifest.json`
|
||||
- Rollback: restore WBV2-P25-003 as queue parent and leave the implementation slice in_progress.
|
||||
33
docs/tasks/WBV2-P25-005.md
Normal file
33
docs/tasks/WBV2-P25-005.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WBV2-P25-005: implement_animation_constraint_render_surface
|
||||
|
||||
- task: WBV2-P25-005
|
||||
- parent: WBV2-P25-004
|
||||
- status: in_progress
|
||||
- gap: ANIMATION.RENDER
|
||||
- ownerFamily: ANIMATION
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Wire animation, constraints, NLA, camera, light, world and sculpt command families.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused source: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-implementation-slice.mjs --task WBV2-P25-005 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- worker/client/frontend route uses the typed protocol without a duplicate shim
|
||||
- malformed or unsupported input fails closed without claiming parity
|
||||
- implementation smoke is reproducible; detailed Chromium receipt, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P25-005 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P25-005/`
|
||||
- Status: `docs/status/WBV2-P25-005.md`
|
||||
- Manifest: `tests/golden/WBV2-P25-005/manifest.json`
|
||||
- Rollback: restore WBV2-P25-004 as queue parent and leave the implementation slice in_progress.
|
||||
33
docs/tasks/WBV2-P25-006.md
Normal file
33
docs/tasks/WBV2-P25-006.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WBV2-P25-006: implement_io_media_storage_surface
|
||||
|
||||
- task: WBV2-P25-006
|
||||
- parent: WBV2-P25-005
|
||||
- status: in_progress
|
||||
- gap: IO.MEDIA_STORAGE
|
||||
- ownerFamily: IO
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Wire image, library, font, blend persistence and resource routing paths using existing source implementations.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused source: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-implementation-slice.mjs --task WBV2-P25-006 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- worker/client/frontend route uses the typed protocol without a duplicate shim
|
||||
- malformed or unsupported input fails closed without claiming parity
|
||||
- implementation smoke is reproducible; detailed Chromium receipt, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P25-006 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P25-006/`
|
||||
- Status: `docs/status/WBV2-P25-006.md`
|
||||
- Manifest: `tests/golden/WBV2-P25-006/manifest.json`
|
||||
- Rollback: restore WBV2-P25-005 as queue parent and leave the implementation slice in_progress.
|
||||
33
docs/tasks/WBV2-P25-007.md
Normal file
33
docs/tasks/WBV2-P25-007.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WBV2-P25-007: implement_frontend_workbench_surface
|
||||
|
||||
- task: WBV2-P25-007
|
||||
- parent: WBV2-P25-006
|
||||
- status: in_progress
|
||||
- gap: FRONTEND.WORKBENCH
|
||||
- ownerFamily: FRONTEND
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Expose implemented command families through worker/client state and the workbench controls without duplicating protocol logic.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `web/app/src`
|
||||
- Focused source: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-implementation-slice.mjs --task WBV2-P25-007 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- worker/client/frontend route uses the typed protocol without a duplicate shim
|
||||
- malformed or unsupported input fails closed without claiming parity
|
||||
- implementation smoke is reproducible; detailed Chromium receipt, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P25-007 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P25-007/`
|
||||
- Status: `docs/status/WBV2-P25-007.md`
|
||||
- Manifest: `tests/golden/WBV2-P25-007/manifest.json`
|
||||
- Rollback: restore WBV2-P25-006 as queue parent and leave the implementation slice in_progress.
|
||||
33
docs/tasks/WBV2-P25-008.md
Normal file
33
docs/tasks/WBV2-P25-008.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WBV2-P25-008: run_implementation_wave_smoke
|
||||
|
||||
- task: WBV2-P25-008
|
||||
- parent: WBV2-P25-007
|
||||
- status: in_progress
|
||||
- gap: workflow:run_implementation_wave_smoke
|
||||
- ownerFamily: RELEASE
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Run only bounded build and browser-start smoke; leave full production verification for the next wave.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `web/package.json`
|
||||
- Focused source: `web/app/package.json`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-implementation-smoke.mjs --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- worker/client/frontend route uses the typed protocol without a duplicate shim
|
||||
- malformed or unsupported input fails closed without claiming parity
|
||||
- implementation smoke is reproducible; detailed Chromium receipt, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P25-008 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P25-008/`
|
||||
- Status: `docs/status/WBV2-P25-008.md`
|
||||
- Manifest: `tests/golden/WBV2-P25-008/manifest.json`
|
||||
- Rollback: restore WBV2-P25-007 as queue parent and leave the implementation slice in_progress.
|
||||
32
docs/tasks/WBV2-P26-000.md
Normal file
32
docs/tasks/WBV2-P26-000.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P26-000: authorize_advanced_capability_implementation
|
||||
|
||||
- task: WBV2-P26-000
|
||||
- parent: WBV2-P25-008
|
||||
- status: done
|
||||
- gap: workflow:authorize_advanced_capability_implementation
|
||||
- ownerFamily: PROGRAM
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Authorize source-backed implementation for remaining guarded and unexposed capability domains.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused protocol: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-advanced-slice.mjs --task WBV2-P26-000 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- malformed, unsupported, hash-drift or false-completion input fails closed
|
||||
- implementation smoke is reproducible; Chromium receipts, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P26-000 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P26-000/`
|
||||
- Status: `docs/status/WBV2-P26-000.md`
|
||||
- Manifest: `tests/golden/WBV2-P26-000/manifest.json`
|
||||
- Rollback: restore WBV2-P25-008 as queue parent and leave the slice in_progress.
|
||||
32
docs/tasks/WBV2-P26-001.md
Normal file
32
docs/tasks/WBV2-P26-001.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P26-001: implement_geometry_nodes_main_writer
|
||||
|
||||
- task: WBV2-P26-001
|
||||
- parent: WBV2-P26-000
|
||||
- status: in_progress
|
||||
- gap: GEOMETRY_NODES.MAIN_WRITER
|
||||
- ownerFamily: GEOMETRY
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Persist validated Geometry Node graphs through the authoritative Main writer.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused protocol: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-advanced-slice.mjs --task WBV2-P26-001 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- malformed, unsupported, hash-drift or false-completion input fails closed
|
||||
- implementation smoke is reproducible; Chromium receipts, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P26-001 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P26-001/`
|
||||
- Status: `docs/status/WBV2-P26-001.md`
|
||||
- Manifest: `tests/golden/WBV2-P26-001/manifest.json`
|
||||
- Rollback: restore WBV2-P26-000 as queue parent and leave the slice in_progress.
|
||||
32
docs/tasks/WBV2-P26-002.md
Normal file
32
docs/tasks/WBV2-P26-002.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P26-002: implement_shader_graph_workbench
|
||||
|
||||
- task: WBV2-P26-002
|
||||
- parent: WBV2-P26-001
|
||||
- status: in_progress
|
||||
- gap: SHADER.GRAPH_WORKBENCH
|
||||
- ownerFamily: SHADER
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Expose the source-backed shader graph writer through the workbench.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused protocol: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-advanced-slice.mjs --task WBV2-P26-002 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- malformed, unsupported, hash-drift or false-completion input fails closed
|
||||
- implementation smoke is reproducible; Chromium receipts, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P26-002 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P26-002/`
|
||||
- Status: `docs/status/WBV2-P26-002.md`
|
||||
- Manifest: `tests/golden/WBV2-P26-002/manifest.json`
|
||||
- Rollback: restore WBV2-P26-001 as queue parent and leave the slice in_progress.
|
||||
32
docs/tasks/WBV2-P26-003.md
Normal file
32
docs/tasks/WBV2-P26-003.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P26-003: implement_simulation_physics_particle
|
||||
|
||||
- task: WBV2-P26-003
|
||||
- parent: WBV2-P26-002
|
||||
- status: in_progress
|
||||
- gap: SIMULATION.PHYSICS_PARTICLE
|
||||
- ownerFamily: SIMULATION
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Connect physics, particle and cache capability routes to real Main data.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused protocol: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-advanced-slice.mjs --task WBV2-P26-003 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- malformed, unsupported, hash-drift or false-completion input fails closed
|
||||
- implementation smoke is reproducible; Chromium receipts, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P26-003 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P26-003/`
|
||||
- Status: `docs/status/WBV2-P26-003.md`
|
||||
- Manifest: `tests/golden/WBV2-P26-003/manifest.json`
|
||||
- Rollback: restore WBV2-P26-002 as queue parent and leave the slice in_progress.
|
||||
32
docs/tasks/WBV2-P26-004.md
Normal file
32
docs/tasks/WBV2-P26-004.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P26-004: implement_render_compositor_sequencer
|
||||
|
||||
- task: WBV2-P26-004
|
||||
- parent: WBV2-P26-003
|
||||
- status: in_progress
|
||||
- gap: RENDER.COMPOSITOR_SEQUENCER
|
||||
- ownerFamily: RENDER
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Connect render, compositor, sequencer and media playback surfaces.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused protocol: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-advanced-slice.mjs --task WBV2-P26-004 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- malformed, unsupported, hash-drift or false-completion input fails closed
|
||||
- implementation smoke is reproducible; Chromium receipts, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P26-004 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P26-004/`
|
||||
- Status: `docs/status/WBV2-P26-004.md`
|
||||
- Manifest: `tests/golden/WBV2-P26-004/manifest.json`
|
||||
- Rollback: restore WBV2-P26-003 as queue parent and leave the slice in_progress.
|
||||
32
docs/tasks/WBV2-P26-005.md
Normal file
32
docs/tasks/WBV2-P26-005.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P26-005: implement_asset_library_storage
|
||||
|
||||
- task: WBV2-P26-005
|
||||
- parent: WBV2-P26-004
|
||||
- status: in_progress
|
||||
- gap: IO.ASSET_LIBRARY_STORAGE
|
||||
- ownerFamily: IO
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Complete library append, packed assets, OPFS and resource lifecycle paths.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused protocol: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-advanced-slice.mjs --task WBV2-P26-005 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- malformed, unsupported, hash-drift or false-completion input fails closed
|
||||
- implementation smoke is reproducible; Chromium receipts, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P26-005 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P26-005/`
|
||||
- Status: `docs/status/WBV2-P26-005.md`
|
||||
- Manifest: `tests/golden/WBV2-P26-005/manifest.json`
|
||||
- Rollback: restore WBV2-P26-004 as queue parent and leave the slice in_progress.
|
||||
32
docs/tasks/WBV2-P26-006.md
Normal file
32
docs/tasks/WBV2-P26-006.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# WBV2-P26-006: run_advanced_implementation_smoke
|
||||
|
||||
- task: WBV2-P26-006
|
||||
- parent: WBV2-P26-005
|
||||
- status: in_progress
|
||||
- gap: workflow:run_advanced_implementation_smoke
|
||||
- ownerFamily: RELEASE
|
||||
- targetImplementationClass: SOURCE_BACKED
|
||||
|
||||
## 目标
|
||||
|
||||
Run a bounded build/start smoke before opening the deferred verification wave.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Focused protocol: `web/protocol/web-engine.ts`
|
||||
- Implementation entrypoint: `node tools/web/generate-wbv2-advanced-slice.mjs --task WBV2-P26-006 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- real source or WebEngine Main implementation is present and connected
|
||||
- malformed, unsupported, hash-drift or false-completion input fails closed
|
||||
- implementation smoke is reproducible; Chromium receipts, undo/redo, save/reopen and deterministic verification remain deferred
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P26-006 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P26-006/`
|
||||
- Status: `docs/status/WBV2-P26-006.md`
|
||||
- Manifest: `tests/golden/WBV2-P26-006/manifest.json`
|
||||
- Rollback: restore WBV2-P26-005 as queue parent and leave the slice in_progress.
|
||||
33
docs/tasks/WBV2-P27-000.md
Normal file
33
docs/tasks/WBV2-P27-000.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WBV2-P27-000: authorize_deferred_verification_wave
|
||||
|
||||
- task: WBV2-P27-000
|
||||
- parent: WBV2-P26-006
|
||||
- status: done
|
||||
- gap: workflow:authorize_deferred_verification_wave
|
||||
- ownerFamily: PROGRAM
|
||||
- targetImplementationClass: VERIFICATION_ONLY
|
||||
|
||||
## 目标
|
||||
|
||||
Authorize efficient capability-family verification after the implementation wave without changing inventory.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused inventory: `tests/golden/WBV2-P0-002/parity-map.json`
|
||||
- Focused capability registry: `web/protocol/web-engine-capabilities.ts`
|
||||
- Verification entrypoint: `node tools/web/generate-wbv2-verification-batch.mjs --task WBV2-P27-000 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- source hash, behavior hash and dedupe key are reused before any run
|
||||
- existing Blender/WASM/Chromium evidence is not rerun
|
||||
- malformed, unsupported, transaction, save/reopen and deterministic checks are required only for a new behavior
|
||||
- completion overlay remains unchanged until a complete one-to-one receipt exists
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P27-000 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P27-000/`
|
||||
- Status: `docs/status/WBV2-P27-000.md`
|
||||
- Manifest: `tests/golden/WBV2-P27-000/manifest.json`
|
||||
- Rollback: restore WBV2-P26-006 as queue parent.
|
||||
33
docs/tasks/WBV2-P27-001.md
Normal file
33
docs/tasks/WBV2-P27-001.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WBV2-P27-001: build_capability_family_verification_batches
|
||||
|
||||
- task: WBV2-P27-001
|
||||
- parent: WBV2-P27-000
|
||||
- status: in_progress
|
||||
- gap: VERIFICATION.BATCH_PLANNER
|
||||
- ownerFamily: VERIFICATION
|
||||
- targetImplementationClass: VERIFICATION_ONLY
|
||||
|
||||
## 目标
|
||||
|
||||
Build a deduplicated batch planner that maps unique behavior hashes to the 6900 inventory without rerunning existing evidence.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused inventory: `tests/golden/WBV2-P0-002/parity-map.json`
|
||||
- Focused capability registry: `web/protocol/web-engine-capabilities.ts`
|
||||
- Verification entrypoint: `node tools/web/generate-wbv2-verification-batch.mjs --task WBV2-P27-001 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- source hash, behavior hash and dedupe key are reused before any run
|
||||
- existing Blender/WASM/Chromium evidence is not rerun
|
||||
- malformed, unsupported, transaction, save/reopen and deterministic checks are required only for a new behavior
|
||||
- completion overlay remains unchanged until a complete one-to-one receipt exists
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P27-001 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P27-001/`
|
||||
- Status: `docs/status/WBV2-P27-001.md`
|
||||
- Manifest: `tests/golden/WBV2-P27-001/manifest.json`
|
||||
- Rollback: restore WBV2-P27-000 as queue parent.
|
||||
33
docs/tasks/WBV2-P27-002.md
Normal file
33
docs/tasks/WBV2-P27-002.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WBV2-P27-002: run_chromium_production_batches
|
||||
|
||||
- task: WBV2-P27-002
|
||||
- parent: WBV2-P27-001
|
||||
- status: in_progress
|
||||
- gap: VERIFICATION.CHROMIUM_RECEIPTS
|
||||
- ownerFamily: CHROMIUM
|
||||
- targetImplementationClass: VERIFICATION_ONLY
|
||||
|
||||
## 目标
|
||||
|
||||
Run only new Chromium production behaviors with malformed, transaction and persistence boundaries.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused inventory: `tests/golden/WBV2-P0-002/parity-map.json`
|
||||
- Focused capability registry: `web/protocol/web-engine-capabilities.ts`
|
||||
- Verification entrypoint: `node tools/web/generate-wbv2-verification-batch.mjs --task WBV2-P27-002 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- source hash, behavior hash and dedupe key are reused before any run
|
||||
- existing Blender/WASM/Chromium evidence is not rerun
|
||||
- malformed, unsupported, transaction, save/reopen and deterministic checks are required only for a new behavior
|
||||
- completion overlay remains unchanged until a complete one-to-one receipt exists
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P27-002 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P27-002/`
|
||||
- Status: `docs/status/WBV2-P27-002.md`
|
||||
- Manifest: `tests/golden/WBV2-P27-002/manifest.json`
|
||||
- Rollback: restore WBV2-P27-001 as queue parent.
|
||||
33
docs/tasks/WBV2-P27-003.md
Normal file
33
docs/tasks/WBV2-P27-003.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# WBV2-P27-003: close_hash_bound_completion_overlay
|
||||
|
||||
- task: WBV2-P27-003
|
||||
- parent: WBV2-P27-002
|
||||
- status: planned
|
||||
- gap: VERIFICATION.COMPLETION_OVERLAY
|
||||
- ownerFamily: RELEASE
|
||||
- targetImplementationClass: VERIFICATION_ONLY
|
||||
|
||||
## 目标
|
||||
|
||||
Publish one-to-one hash-bound completion overlay entries after complete receipts.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused inventory: `tests/golden/WBV2-P0-002/parity-map.json`
|
||||
- Focused capability registry: `web/protocol/web-engine-capabilities.ts`
|
||||
- Verification entrypoint: `node tools/web/generate-wbv2-verification-batch.mjs --task WBV2-P27-003 --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- source hash, behavior hash and dedupe key are reused before any run
|
||||
- existing Blender/WASM/Chromium evidence is not rerun
|
||||
- malformed, unsupported, transaction, save/reopen and deterministic checks are required only for a new behavior
|
||||
- completion overlay remains unchanged until a complete one-to-one receipt exists
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P27-003 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P27-003/`
|
||||
- Status: `docs/status/WBV2-P27-003.md`
|
||||
- Manifest: `tests/golden/WBV2-P27-003/manifest.json`
|
||||
- Rollback: restore WBV2-P27-002 as queue parent.
|
||||
47
nextTask.md
47
nextTask.md
@@ -18,36 +18,21 @@ and (when authorized) repository push:
|
||||
```text
|
||||
按 nextTask.md 接续执行。
|
||||
|
||||
这是执行命令,不是计划或状态咨询。进入 CONTINUOUS 模式,每次只完成一个有边界的任务,成功交接后立即从新 parent manifest 继续,直到全部任务完成、队列闭合或遇到真实停止条件。
|
||||
这是实现命令,不是计划或状态咨询。进入 IMPLEMENTATION-FIRST 连续模式:先使用仓库已有源码把完整功能链路(Blender WebEngine Main、协议、WASM worker、客户端和前端)逐能力族实现并接通;详细 Chromium 生产证据、双次确定性、逐项 parity overlay 延后到实现波次完成后的验证波次。
|
||||
|
||||
1. 先读取 `AGENTS.md` 和 `docs/EXECUTION_QUEUE.md`,然后运行:
|
||||
`node tools/web/print-task-context.mjs`
|
||||
`node tools/web/check-task-context.mjs`
|
||||
2. 当前任务必须等于队列中 parent manifest 的 `nextTask`。只读取当前任务卡、parent manifest/status 和 task-context 列出的最小输入;禁止默认读取完整历史计划、全部 `docs/status` 或完整 6900 条目详情。
|
||||
3. 每次只执行当前任务卡规定的一个行为或一个独立证据变化。`M*-GAP-*` 只作回归覆盖,`WBV2-*` 才负责生产能力;只使用 Chromium,禁止 Firefox/WebKit。
|
||||
4. 绝不重复工作:
|
||||
- 先比较 source hash、behavior hash、dedupe key 和已有 manifest;相同证据直接复用;
|
||||
- 已有相同行为的 Blender/WASM/Chromium 运行不得再次执行;
|
||||
- 6900 条目按 capability family 和唯一行为批次推进,不逐条重复验证;
|
||||
- 已完成条目只作回归引用;代表性回执不能升级为全家族完成。
|
||||
5. 新行为必须有真实源码或 WebEngine Main 路径、Chromium 生产测试、malformed/unsupported 失败边界、事务或 undo/redo、save/reopen,以及第二次相同运行的确定性证据。
|
||||
6. 只有一对一且 hash-bound 的完整证据才能写入 completion overlay。原始 P0 inventory 和历史 provenance 保持只读;`effective completed/pending` 只能由 overlay 计算,不能篡改原始 6900/6618 基线。
|
||||
7. 长输出写入 `tests/golden/<task>/command.log`,交互只报告退出码、短尾部、构件路径和 SHA-256。
|
||||
8. 任务成功后运行:
|
||||
`node tools/web/check-task-context.mjs --task <task-id> --write`
|
||||
`node tools/web/check-context-governance.mjs`
|
||||
`node tools/web/check-execution-control-plane.mjs`
|
||||
`node tools/web/check-v2-task-index.mjs`
|
||||
`node tools/web/check-v2-handoff.mjs`
|
||||
`npm --prefix web run test:context-governance`
|
||||
`npm --prefix web run test:task-context`
|
||||
`npm --prefix web run typecheck`
|
||||
`npm --prefix web run lint`
|
||||
`git diff --check`
|
||||
9. 只有所有门禁、构件 hash 和 manifest 引用通过后,才使用仓库生成器更新 index/catalog/card、提交并推送现有 `origin/main`。凭据只能交互输入,不能写入文件、URL、日志或提示词;推送后核对 `HEAD == origin/main`。
|
||||
10. 成功交接后丢弃旧任务上下文,重新运行 `print-task-context`,只携带新的 parent manifest/status,不能等待下一条用户消息。
|
||||
11. 任一命令失败、输入缺失、预算超限、hash 漂移、治理失败、队列不一致、环境不可用或状态不明时,保持 `in_progress`/`blocked`,不得推进 `nextTask`,不得伪造完成或重试未知的状态改变命令,并报告精确阻塞证据。
|
||||
12. 每轮结束报告:已完成任务、当前任务、`nextTask`、验证退出码、effective inventory、原始 inventory、构件 hash、提交/推送状态和剩余阻塞。
|
||||
2. 当前任务必须等于 parent manifest 的 `nextTask`。只读取当前任务卡、parent manifest/status 和 task-context 列出的最小输入;禁止默认读取完整历史计划、全部 `docs/status` 或 6900 条目详情。
|
||||
3. 每次只实现当前任务卡规定的一个能力族或一个独立接线切片。优先复用和补全已有 Blender 源码、WebEngine Main dispatch、协议类型、worker/client 路由和前端入口;不得用模拟数据或空壳接口替代真实实现。
|
||||
4. 严禁重复工作:相同 source hash、behavior hash、dedupe key 或已存在的实现直接复用;不重复运行已有 Blender/WASM/Chromium 行为;6900 条目按 capability family 批量映射,完成条目只作未来回归引用。
|
||||
5. 实现波次只要求最小安全检查(源码语法、TypeScript typecheck、lint、可用时的 Vite/build 和浏览器启动 smoke);不为每个新能力生成完整 E2E receipt,不在实现阶段写 completion overlay,不声称历史 parity。
|
||||
6. 原始 P0 inventory、6900 总数、6618 legacy pending 和历史 provenance 始终只读。effective completed/pending 只由后续 hash-bound 验证 overlay 计算;实现完成不等于条目完成。
|
||||
7. 长输出写入 `tests/golden/<task>/command.log`;交互只报告退出码、短尾部、构件路径和 SHA-256。
|
||||
8. 任务成功后运行 `node tools/web/check-task-context.mjs --task <task-id> --write`、`node tools/web/check-context-governance.mjs`、`node tools/web/check-v2-task-index.mjs`、`npm --prefix web run typecheck`、`npm --prefix web run lint` 和 `git diff --check`;完整生产验证门禁统一在验证波次执行。
|
||||
9. 所有实现门禁通过后自动提交并推送 `origin/main`,从新 parent manifest 重新读取 `nextTask` 继续。凭据不得写入文件、URL、日志或提示词。
|
||||
10. 任一命令失败、输入缺失、队列不一致、环境不可用或状态不明时,保持 `in_progress`/`blocked`,不得推进指针、伪造完成或重复未知结果的状态改变命令。
|
||||
11. 每轮结束报告实现切片、当前任务、`nextTask`、最小检查退出码、原始 inventory、effective inventory 是否保持不变、提交/推送状态和剩余真实阻塞。
|
||||
```
|
||||
|
||||
## Resume Command
|
||||
@@ -219,12 +204,12 @@ Recorded: 2026-08-22 America/New_York
|
||||
|
||||
| Field | Value |
|
||||
| --- | --- |
|
||||
| Current task when this file was written | `WBV2-P24-001` |
|
||||
| Current task when this file was written | `WBV2-P27-002` |
|
||||
| Current task state | `in_progress` |
|
||||
| Parent manifest | `tests/golden/WBV2-P24-000/manifest.json` |
|
||||
| Current task card | `docs/tasks/WBV2-P24-001.md` |
|
||||
| Current task-context nextTask | `WBV2-P24-002` |
|
||||
| Focused command | `node tools/web/generate-wbv2-move-selection.mjs --write` |
|
||||
| Parent manifest | `tests/golden/WBV2-P27-001/manifest.json` |
|
||||
| Current task card | `docs/tasks/WBV2-P27-002.md` |
|
||||
| Current task-context nextTask | `WBV2-P27-003` |
|
||||
| Focused command | `node tools/web/generate-wbv2-chromium-batch.mjs --task WBV2-P27-002 --write` |
|
||||
|
||||
The snapshot is informational and may become stale. On every resume, the queue,
|
||||
parent manifest, and fresh `print-task-context` output win. Never infer a task
|
||||
|
||||
Binary file not shown.
72
tests/golden/WBV2-P24-001/manifest.json
Normal file
72
tests/golden/WBV2-P24-001/manifest.json
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-001",
|
||||
"parentTask": "WBV2-P24-000",
|
||||
"operation": "SELECT_OBJECT_MOVE_COLLECTION_BATCH",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "READ_ONLY_SOURCE_CANDIDATE_SELECTION",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P24-000/manifest.json",
|
||||
"sha256": "a54498d2508fd71e4d9fb0d5f5d540cf33d09ba63afe1b2f6932a4369f8541b0"
|
||||
},
|
||||
"inventory": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8"
|
||||
},
|
||||
"api": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"
|
||||
},
|
||||
"protocol": {
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"sha256": "3bbe172afaaa414d8ede43e6c04aa84443b6e38319d09710afa141c9b5e69fc0"
|
||||
},
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P24-001-OBJECT_OPERATIONS.MOVE_COLLECTION.blend",
|
||||
"sha256": "9bbe7fb683564fad26077b62f88af47fe9236caab067ce2d75b6ec79a4511cbf"
|
||||
},
|
||||
"candidate": {
|
||||
"path": "tests/golden/WBV2-P24-001/object-move-candidate-set.json",
|
||||
"sha256": "9bce2e1e040d635b638a2220fa662fb106bf312662b51e0db28c4cf8f1d54b1c"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P24-001/object-move-selection-report.json",
|
||||
"sha256": "1e56545dc44de7c7e2ecfe45b32dcd6bc2a76287688d5c690f042e9daababd91"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generate-wbv2-move-selection.mjs",
|
||||
"sha256": "9200ab476d6da1b340c1949bb2341ff28871b1348711d2d140fa6ec9eab38d8b"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P24-001.md",
|
||||
"sha256": "642accef6cc17b8e5bed26ec50dde8c0439ac2d272ca715e197d00cd3764b797"
|
||||
},
|
||||
"parityPlan": {
|
||||
"path": "tests/golden/WBV2-P24-001/move-task-plan.json",
|
||||
"sha256": "8a1bebddac997a2895bdfb4490644eb219f7825a2857b7ce681b1adf509f39cc"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P24-001/task-context.json",
|
||||
"sha256": "ef4b624061ce5efeb5c3007bee25ecfe0b83436b75f6f2c680a6b6e26568d460"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"legacyId": "operator:object.move_to_collection",
|
||||
"inventoryTotal": 6900,
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6609,
|
||||
"sourceApiBound": true,
|
||||
"fixtureBound": true,
|
||||
"representativeSliceOnly": true,
|
||||
"fullFamilyParity": false,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true,
|
||||
"deterministic": true,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P24-002"
|
||||
}
|
||||
153
tests/golden/WBV2-P24-001/move-task-plan.json
Normal file
153
tests/golden/WBV2-P24-001/move-task-plan.json
Normal file
@@ -0,0 +1,153 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_PARITY_V2_OBJECT_MOVE_COLLECTION_EPOCH_1",
|
||||
"status": "ACTIVE_OBJECT_MOVE_COLLECTION_QUEUE",
|
||||
"authority": "queue_reactivated_after_p23_transform_gate",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"browserEvidence": [
|
||||
"chromium"
|
||||
],
|
||||
"forbiddenBrowsers": [
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mainAuthority": "blender_main",
|
||||
"reusePolicy": "source_hash_and_behavior_hash_deduplication"
|
||||
},
|
||||
"parentTransform": {
|
||||
"manifest": "tests/golden/WBV2-P23-003/manifest.json",
|
||||
"report": "tests/golden/WBV2-P23-003/object-transform-gate-report.json",
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6609,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P24-000",
|
||||
"phase": "P24",
|
||||
"title": "authorize_object_move_collection_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P23-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p24-000",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P24-000.md",
|
||||
"behavior": "Authorize one Object Move-to-Collection behavior after the P23 transform overlay.",
|
||||
"outputs": [
|
||||
"report",
|
||||
"receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"source and evidence hashes are bound",
|
||||
"unique behavior is verified once",
|
||||
"save/reopen remains exact",
|
||||
"malformed input fails closed"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-001",
|
||||
"phase": "P24",
|
||||
"title": "select_object_move_collection_batch",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p24-001",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P24-001.md",
|
||||
"behavior": "Select moveObjectToCollection as one unique Object Operations behavior.",
|
||||
"outputs": [
|
||||
"report",
|
||||
"receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"source and evidence hashes are bound",
|
||||
"unique behavior is verified once",
|
||||
"save/reopen remains exact",
|
||||
"malformed input fails closed"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-002",
|
||||
"phase": "P24",
|
||||
"title": "object_move_collection_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "LOCAL_EXACT",
|
||||
"parallelGroup": "p24-002",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P24-002.md",
|
||||
"behavior": "Bind moveObjectToCollection, undo/redo, malformed rejection, and exact save/reopen to compiled WASM Main in Chromium.",
|
||||
"outputs": [
|
||||
"report",
|
||||
"receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"source and evidence hashes are bound",
|
||||
"unique behavior is verified once",
|
||||
"save/reopen remains exact",
|
||||
"malformed input fails closed"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-003",
|
||||
"phase": "P24",
|
||||
"title": "close_object_move_collection_gate",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p24-003",
|
||||
"gate": "G5",
|
||||
"card": "docs/tasks/WBV2-P24-003.md",
|
||||
"behavior": "Close the moveObjectToCollection gate and graduate only the exact operator binding.",
|
||||
"outputs": [
|
||||
"report",
|
||||
"receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"source and evidence hashes are bound",
|
||||
"unique behavior is verified once",
|
||||
"save/reopen remains exact",
|
||||
"malformed input fails closed"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
],
|
||||
"parentRecoveryPlan": {
|
||||
"path": "tests/golden/WBV2-P24-000/move-task-plan.json",
|
||||
"sha256": "923d299a9eb53baf81853fc975b036613ccef6866f5973d159bdca26d306d74f"
|
||||
}
|
||||
}
|
||||
65
tests/golden/WBV2-P24-001/object-move-candidate-set.json
Normal file
65
tests/golden/WBV2-P24-001/object-move-candidate-set.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-001",
|
||||
"operation": "OBJECT_MOVE_COLLECTION_CANDIDATE_SELECTION",
|
||||
"status": "READY",
|
||||
"source": {
|
||||
"inventory": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"inventorySha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8",
|
||||
"api": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"apiSha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8",
|
||||
"protocol": "web/protocol/web-engine.ts",
|
||||
"protocolSha256": "3bbe172afaaa414d8ede43e6c04aa84443b6e38319d09710afa141c9b5e69fc0",
|
||||
"fixture": "tests/files/web/generated/WBV2-P24-001-OBJECT_OPERATIONS.MOVE_COLLECTION.blend",
|
||||
"fixtureSha256": "9bbe7fb683564fad26077b62f88af47fe9236caab067ce2d75b6ec79a4511cbf"
|
||||
},
|
||||
"candidate": {
|
||||
"capabilityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"legacyId": "operator:object.move_to_collection",
|
||||
"legacyTask": "M16-GAP-01531",
|
||||
"behavior": {
|
||||
"capability": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"operation": "moveObjectToCollection",
|
||||
"positive": [
|
||||
"collection-membership-change",
|
||||
"undo",
|
||||
"redo",
|
||||
"save-reopen"
|
||||
],
|
||||
"negative": [
|
||||
"missing-object-id",
|
||||
"missing-collection-id"
|
||||
],
|
||||
"browser": "chromium",
|
||||
"engine": "compiled-WASM-WebEngine-Main"
|
||||
},
|
||||
"behaviorHash": "67a7034c380aed1550a0479febaae7d2d4a30a653f70c8907de20a1ec8de2658",
|
||||
"dedupeKey": "OBJECT_OPERATIONS.MOVE_COLLECTION|67a7034c380aed1550a0479febaae7d2d4a30a653f70c8907de20a1ec8de2658|8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8|3bbe172afaaa414d8ede43e6c04aa84443b6e38319d09710afa141c9b5e69fc0|9bbe7fb683564fad26077b62f88af47fe9236caab067ce2d75b6ec79a4511cbf",
|
||||
"sourceBacked": true,
|
||||
"chromiumProductionReady": true,
|
||||
"fullFamilyParity": false
|
||||
},
|
||||
"inventory": {
|
||||
"matchedEntries": 1,
|
||||
"pending": 1,
|
||||
"total": 6900,
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6609,
|
||||
"remainderExplicit": true
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"id": "operator:object.move_to_collection",
|
||||
"sourceTask": "M15-01B",
|
||||
"legacyState": "pending",
|
||||
"targetImplementationClass": "LOCAL_EXACT"
|
||||
}
|
||||
],
|
||||
"policy": {
|
||||
"sourceHistoryReadOnly": true,
|
||||
"representativeSliceOnly": true,
|
||||
"noRepeatedExecution": true,
|
||||
"duplicateValidationAvoided": true,
|
||||
"fullHistoricalReproduction": false
|
||||
}
|
||||
}
|
||||
59
tests/golden/WBV2-P24-001/object-move-selection-report.json
Normal file
59
tests/golden/WBV2-P24-001/object-move-selection-report.json
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-001",
|
||||
"operation": "SELECT_OBJECT_MOVE_COLLECTION_BATCH",
|
||||
"status": "PASS",
|
||||
"candidate": {
|
||||
"capabilityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"legacyId": "operator:object.move_to_collection",
|
||||
"legacyTask": "M16-GAP-01531",
|
||||
"behavior": {
|
||||
"capability": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"operation": "moveObjectToCollection",
|
||||
"positive": [
|
||||
"collection-membership-change",
|
||||
"undo",
|
||||
"redo",
|
||||
"save-reopen"
|
||||
],
|
||||
"negative": [
|
||||
"missing-object-id",
|
||||
"missing-collection-id"
|
||||
],
|
||||
"browser": "chromium",
|
||||
"engine": "compiled-WASM-WebEngine-Main"
|
||||
},
|
||||
"behaviorHash": "67a7034c380aed1550a0479febaae7d2d4a30a653f70c8907de20a1ec8de2658",
|
||||
"dedupeKey": "OBJECT_OPERATIONS.MOVE_COLLECTION|67a7034c380aed1550a0479febaae7d2d4a30a653f70c8907de20a1ec8de2658|8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8|3bbe172afaaa414d8ede43e6c04aa84443b6e38319d09710afa141c9b5e69fc0|9bbe7fb683564fad26077b62f88af47fe9236caab067ce2d75b6ec79a4511cbf",
|
||||
"sourceBacked": true,
|
||||
"chromiumProductionReady": true,
|
||||
"fullFamilyParity": false
|
||||
},
|
||||
"inventory": {
|
||||
"matchedEntries": 1,
|
||||
"pending": 1,
|
||||
"total": 6900,
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6609,
|
||||
"remainderExplicit": true
|
||||
},
|
||||
"source": {
|
||||
"inventory": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"inventorySha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8",
|
||||
"api": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"apiSha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8",
|
||||
"protocol": "web/protocol/web-engine.ts",
|
||||
"protocolSha256": "3bbe172afaaa414d8ede43e6c04aa84443b6e38319d09710afa141c9b5e69fc0",
|
||||
"fixture": "tests/files/web/generated/WBV2-P24-001-OBJECT_OPERATIONS.MOVE_COLLECTION.blend",
|
||||
"fixtureSha256": "9bbe7fb683564fad26077b62f88af47fe9236caab067ce2d75b6ec79a4511cbf"
|
||||
},
|
||||
"matchedEntryDigest": "bad9a48e09b064c02f855262c1427fc896b746c8175898272679ce0a7cf7a22b",
|
||||
"efficiency": {
|
||||
"oneEntryScan": true,
|
||||
"existingEvidenceReused": true,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"nextTask": "WBV2-P24-002"
|
||||
}
|
||||
172
tests/golden/WBV2-P24-001/task-context.json
Normal file
172
tests/golden/WBV2-P24-001/task-context.json
Normal file
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-001",
|
||||
"parentTask": "WBV2-P24-000",
|
||||
"status": "in_progress",
|
||||
"goal": "Select moveObjectToCollection as one unique Object Operations behavior.",
|
||||
"scope": {
|
||||
"gap": "capability:OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"ownerFamily": "PARITY",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P24-001 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 3484,
|
||||
"contextRemainingTokens": 870
|
||||
},
|
||||
"source": {
|
||||
"bytes": 6420,
|
||||
"tokens": 1606
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"bytes": 126797,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"bytes": 16197,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"bytes": 5053386,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-001/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P24-001.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-001/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"source and evidence hashes are bound",
|
||||
"unique behavior is verified once",
|
||||
"save/reopen remains exact",
|
||||
"malformed input fails closed"
|
||||
],
|
||||
"nextTask": "WBV2-P24-002",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P24-001.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P24-000/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P24-000.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P24-001.md",
|
||||
"tests/golden/WBV2-P24-000/manifest.json",
|
||||
"docs/status/WBV2-P24-000.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-000",
|
||||
"parentTask": "WBV2-P23-003",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P24-001",
|
||||
"artifactCount": 9
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P24-000 status",
|
||||
"- task: `WBV2-P24-000`; parent: `WBV2-P23-003`; status: `done`",
|
||||
"- candidate: `OBJECT_OPERATIONS.MOVE_COLLECTION`; source API is present",
|
||||
"- effective inventory carried forward: `290` completed, `6609` pending",
|
||||
"- duplicate validation: `forbidden`; representative slice only",
|
||||
"- nextTask: `WBV2-P24-001`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1099,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 35,
|
||||
"taskTokens": 275
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P24-001.md",
|
||||
"bytes": 1099,
|
||||
"lines": 35,
|
||||
"tokens": 275
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-000/manifest.json",
|
||||
"bytes": 2199,
|
||||
"lines": 61,
|
||||
"tokens": 550
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P24-000.md",
|
||||
"bytes": 319,
|
||||
"lines": 8,
|
||||
"tokens": 80
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1606,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1606,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2630,
|
||||
"serializedContextTokens": 603,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
78
tests/golden/WBV2-P24-002/manifest.json
Normal file
78
tests/golden/WBV2-P24-002/manifest.json
Normal file
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-002",
|
||||
"parentTask": "WBV2-P24-001",
|
||||
"operation": "OBJECT_MOVE_COLLECTION_ENGINE_RECEIPT",
|
||||
"status": "done",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "PLAYWRIGHT_CHROMIUM_WEBENGINE_WASM",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P24-001/manifest.json",
|
||||
"sha256": "3824f2e193ada59bba9c0b97796ec35223d0f7011ac71b1f0fdda69fd89baa22"
|
||||
},
|
||||
"selection": {
|
||||
"path": "tests/golden/WBV2-P24-001/object-move-selection-report.json",
|
||||
"sha256": "1e56545dc44de7c7e2ecfe45b32dcd6bc2a76287688d5c690f042e9daababd91"
|
||||
},
|
||||
"api": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"
|
||||
},
|
||||
"test": {
|
||||
"path": "web/tests/e2e/wbv2-object-move-production.spec.ts",
|
||||
"sha256": "006ec23f600731c97dd3c00e65ad6739788e88861ab5833ee468f7eae801afee"
|
||||
},
|
||||
"fixture": {
|
||||
"path": "tests/files/web/generated/WBV2-P24-001-OBJECT_OPERATIONS.MOVE_COLLECTION.blend",
|
||||
"sha256": "9bbe7fb683564fad26077b62f88af47fe9236caab067ce2d75b6ec79a4511cbf"
|
||||
},
|
||||
"production": {
|
||||
"path": "tests/golden/WBV2-P24-002/object-move-production.json",
|
||||
"sha256": "afd8c884c8a8eb5638e032f9d186b14256378438d48d5f19a2ba8916089490d5"
|
||||
},
|
||||
"secondProduction": {
|
||||
"path": "tests/golden/WBV2-P24-002/object-move-production.second.json",
|
||||
"sha256": "afd8c884c8a8eb5638e032f9d186b14256378438d48d5f19a2ba8916089490d5"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P24-002/object-move-receipt-report.json",
|
||||
"sha256": "80cfc07b0c900cf988d77488b3d7d6c7b8ab701c61f2993d40c0291289946356"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generate-wbv2-move-receipt.mjs",
|
||||
"sha256": "77262db826dabea9ed645795076265c51b9703267d08817776b574b5159ae0b9"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P24-002.md",
|
||||
"sha256": "a84771670a5463c878ec31260ae6f1f44daf951b2d88d7d7fa102403940800cb"
|
||||
},
|
||||
"parityPlan": {
|
||||
"path": "tests/golden/WBV2-P24-002/move-task-plan.json",
|
||||
"sha256": "5ff6dae3c443e5c6edca8724e0f99b6a36062a6067be61d8d006cc82df0b8444"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P24-002/task-context.json",
|
||||
"sha256": "c6ec716c7603fad1922c8e52c08d18b3dde18e4dca75e05f8df8c4594e8e42e0"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"exactInventoryBindings": 1,
|
||||
"boundInventoryIds": [
|
||||
"operator:object.move_to_collection"
|
||||
],
|
||||
"collectionMembershipChanged": true,
|
||||
"undoRedoSequential": true,
|
||||
"malformedRejected": true,
|
||||
"saveReopen": "EXACT",
|
||||
"deterministic": true,
|
||||
"representativeSliceOnly": true,
|
||||
"fullFamilyParity": false,
|
||||
"inventoryTotal": 6900,
|
||||
"baseInventoryPending": 6618,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P24-003"
|
||||
}
|
||||
153
tests/golden/WBV2-P24-002/move-task-plan.json
Normal file
153
tests/golden/WBV2-P24-002/move-task-plan.json
Normal file
@@ -0,0 +1,153 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_PARITY_V2_OBJECT_MOVE_COLLECTION_EPOCH_1",
|
||||
"status": "ACTIVE_OBJECT_MOVE_COLLECTION_QUEUE",
|
||||
"authority": "queue_reactivated_after_p23_transform_gate",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"browserEvidence": [
|
||||
"chromium"
|
||||
],
|
||||
"forbiddenBrowsers": [
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mainAuthority": "blender_main",
|
||||
"reusePolicy": "source_hash_and_behavior_hash_deduplication"
|
||||
},
|
||||
"parentTransform": {
|
||||
"manifest": "tests/golden/WBV2-P23-003/manifest.json",
|
||||
"report": "tests/golden/WBV2-P23-003/object-transform-gate-report.json",
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6609,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P24-000",
|
||||
"phase": "P24",
|
||||
"title": "authorize_object_move_collection_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P23-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p24-000",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P24-000.md",
|
||||
"behavior": "Authorize one Object Move-to-Collection behavior after the P23 transform overlay.",
|
||||
"outputs": [
|
||||
"report",
|
||||
"receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"source and evidence hashes are bound",
|
||||
"unique behavior is verified once",
|
||||
"save/reopen remains exact",
|
||||
"malformed input fails closed"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-001",
|
||||
"phase": "P24",
|
||||
"title": "select_object_move_collection_batch",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p24-001",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P24-001.md",
|
||||
"behavior": "Select moveObjectToCollection as one unique Object Operations behavior.",
|
||||
"outputs": [
|
||||
"report",
|
||||
"receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"source and evidence hashes are bound",
|
||||
"unique behavior is verified once",
|
||||
"save/reopen remains exact",
|
||||
"malformed input fails closed"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-002",
|
||||
"phase": "P24",
|
||||
"title": "object_move_collection_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "LOCAL_EXACT",
|
||||
"parallelGroup": "p24-002",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P24-002.md",
|
||||
"behavior": "Bind moveObjectToCollection, undo/redo, malformed rejection, and exact save/reopen to compiled WASM Main in Chromium.",
|
||||
"outputs": [
|
||||
"report",
|
||||
"receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"source and evidence hashes are bound",
|
||||
"unique behavior is verified once",
|
||||
"save/reopen remains exact",
|
||||
"malformed input fails closed"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-003",
|
||||
"phase": "P24",
|
||||
"title": "close_object_move_collection_gate",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p24-003",
|
||||
"gate": "G5",
|
||||
"card": "docs/tasks/WBV2-P24-003.md",
|
||||
"behavior": "Close the moveObjectToCollection gate and graduate only the exact operator binding.",
|
||||
"outputs": [
|
||||
"report",
|
||||
"receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"source and evidence hashes are bound",
|
||||
"unique behavior is verified once",
|
||||
"save/reopen remains exact",
|
||||
"malformed input fails closed"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
],
|
||||
"parentRecoveryPlan": {
|
||||
"path": "tests/golden/WBV2-P24-001/move-task-plan.json",
|
||||
"sha256": "8a1bebddac997a2895bdfb4490644eb219f7825a2857b7ce681b1adf509f39cc"
|
||||
}
|
||||
}
|
||||
26
tests/golden/WBV2-P24-002/object-move-production.json
Normal file
26
tests/golden/WBV2-P24-002/object-move-production.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-002",
|
||||
"operation": "OBJECT_MOVE_COLLECTION_ENGINE_CHROMIUM",
|
||||
"queueMutation": false,
|
||||
"fixtureSha256": "9bbe7fb683564fad26077b62f88af47fe9236caab067ce2d75b6ec79a4511cbf",
|
||||
"browser": "chromium",
|
||||
"baseRevision": 1,
|
||||
"objectId": "object:WBV2P2401Cube",
|
||||
"sourceId": "collection:SourceCollection",
|
||||
"targetId": "collection:MoveTargetCollection",
|
||||
"beforeSourceHasObject": true,
|
||||
"movedTargetHasObject": true,
|
||||
"changedRevision": 2,
|
||||
"undoRevision": 3,
|
||||
"redoRevision": 4,
|
||||
"malformed": {
|
||||
"code": "INVALID_ARGUMENT",
|
||||
"message": "moveObjectToCollection requires editable object and collection data-blocks"
|
||||
},
|
||||
"malformedRevisionPreserved": true,
|
||||
"reopenedTargetHasObject": true,
|
||||
"reopenedSourceHasObject": false,
|
||||
"reopenedRevision": 1,
|
||||
"savedSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
26
tests/golden/WBV2-P24-002/object-move-production.second.json
Normal file
26
tests/golden/WBV2-P24-002/object-move-production.second.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-002",
|
||||
"operation": "OBJECT_MOVE_COLLECTION_ENGINE_CHROMIUM",
|
||||
"queueMutation": false,
|
||||
"fixtureSha256": "9bbe7fb683564fad26077b62f88af47fe9236caab067ce2d75b6ec79a4511cbf",
|
||||
"browser": "chromium",
|
||||
"baseRevision": 1,
|
||||
"objectId": "object:WBV2P2401Cube",
|
||||
"sourceId": "collection:SourceCollection",
|
||||
"targetId": "collection:MoveTargetCollection",
|
||||
"beforeSourceHasObject": true,
|
||||
"movedTargetHasObject": true,
|
||||
"changedRevision": 2,
|
||||
"undoRevision": 3,
|
||||
"redoRevision": 4,
|
||||
"malformed": {
|
||||
"code": "INVALID_ARGUMENT",
|
||||
"message": "moveObjectToCollection requires editable object and collection data-blocks"
|
||||
},
|
||||
"malformedRevisionPreserved": true,
|
||||
"reopenedTargetHasObject": true,
|
||||
"reopenedSourceHasObject": false,
|
||||
"reopenedRevision": 1,
|
||||
"savedSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
66
tests/golden/WBV2-P24-002/object-move-receipt-report.json
Normal file
66
tests/golden/WBV2-P24-002/object-move-receipt-report.json
Normal file
@@ -0,0 +1,66 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-002",
|
||||
"operation": "OBJECT_MOVE_COLLECTION_ENGINE_RECEIPT",
|
||||
"status": "PASS",
|
||||
"browser": "chromium",
|
||||
"queueMutation": false,
|
||||
"source": {
|
||||
"manifest": "tests/golden/WBV2-P24-001/manifest.json",
|
||||
"manifestSha256": "3824f2e193ada59bba9c0b97796ec35223d0f7011ac71b1f0fdda69fd89baa22",
|
||||
"selection": "tests/golden/WBV2-P24-001/object-move-selection-report.json",
|
||||
"selectionSha256": "1e56545dc44de7c7e2ecfe45b32dcd6bc2a76287688d5c690f042e9daababd91",
|
||||
"api": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"apiSha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8",
|
||||
"test": "web/tests/e2e/wbv2-object-move-production.spec.ts",
|
||||
"testSha256": "006ec23f600731c97dd3c00e65ad6739788e88861ab5833ee468f7eae801afee",
|
||||
"fixture": "tests/files/web/generated/WBV2-P24-001-OBJECT_OPERATIONS.MOVE_COLLECTION.blend",
|
||||
"fixtureSha256": "9bbe7fb683564fad26077b62f88af47fe9236caab067ce2d75b6ec79a4511cbf"
|
||||
},
|
||||
"production": {
|
||||
"report": "tests/golden/WBV2-P24-002/object-move-production.json",
|
||||
"reportSha256": "afd8c884c8a8eb5638e032f9d186b14256378438d48d5f19a2ba8916089490d5",
|
||||
"secondReport": "tests/golden/WBV2-P24-002/object-move-production.second.json",
|
||||
"secondReportSha256": "afd8c884c8a8eb5638e032f9d186b14256378438d48d5f19a2ba8916089490d5",
|
||||
"deterministic": true,
|
||||
"objectId": "object:WBV2P2401Cube",
|
||||
"sourceId": "collection:SourceCollection",
|
||||
"targetId": "collection:MoveTargetCollection",
|
||||
"revisions": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"malformed": {
|
||||
"code": "INVALID_ARGUMENT",
|
||||
"message": "moveObjectToCollection requires editable object and collection data-blocks"
|
||||
},
|
||||
"malformedRevisionPreserved": true,
|
||||
"reopenedTargetHasObject": true,
|
||||
"reopenedSourceHasObject": false,
|
||||
"reopenedRevision": 1,
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"inventoryBindings": [
|
||||
{
|
||||
"id": "operator:object.move_to_collection",
|
||||
"evidence": "moveObjectToCollection",
|
||||
"exact": true,
|
||||
"reason": "bounded protocol command moves and persists collection membership"
|
||||
}
|
||||
],
|
||||
"assertions": {
|
||||
"collectionMembershipChanged": true,
|
||||
"undoRedoSequential": true,
|
||||
"malformedRejected": true,
|
||||
"mainUnchangedOnMalformed": true,
|
||||
"saveReopenExact": true,
|
||||
"deterministic": true,
|
||||
"inventoryBindingsExact": true,
|
||||
"representativeSliceOnly": true,
|
||||
"fullFamilyParity": false,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P24-003"
|
||||
}
|
||||
170
tests/golden/WBV2-P24-002/task-context.json
Normal file
170
tests/golden/WBV2-P24-002/task-context.json
Normal file
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-002",
|
||||
"parentTask": "WBV2-P24-001",
|
||||
"status": "in_progress",
|
||||
"goal": "Bind moveObjectToCollection, undo/redo, malformed rejection, and exact save/reopen to compiled WASM Main in Chromium.",
|
||||
"scope": {
|
||||
"gap": "capability:OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"ownerFamily": "OBJECT",
|
||||
"implementationClass": "LOCAL_EXACT"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P24-002 --write"
|
||||
],
|
||||
"inputPaths": [
|
||||
"tests/golden/WBV2-P24-001/object-move-selection-report.json"
|
||||
],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2703,
|
||||
"contextRemainingTokens": 675
|
||||
},
|
||||
"source": {
|
||||
"bytes": 7201,
|
||||
"tokens": 1801
|
||||
},
|
||||
"selected": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-001/object-move-selection-report.json",
|
||||
"bytes": 2330,
|
||||
"tokens": 583
|
||||
}
|
||||
],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "web/tests/e2e/wbv2-object-move-production.spec.ts",
|
||||
"bytes": 4296,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-002/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P24-002.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-002/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 1,
|
||||
"bytes": 2330,
|
||||
"tokens": 583
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"source and evidence hashes are bound",
|
||||
"unique behavior is verified once",
|
||||
"save/reopen remains exact",
|
||||
"malformed input fails closed"
|
||||
],
|
||||
"nextTask": "WBV2-P24-003",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P24-002.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P24-001/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P24-001.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P24-002.md",
|
||||
"tests/golden/WBV2-P24-001/manifest.json",
|
||||
"docs/status/WBV2-P24-001.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-001",
|
||||
"parentTask": "WBV2-P24-000",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P24-002",
|
||||
"artifactCount": 11
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P24-001 status",
|
||||
"- task: `WBV2-P24-001`; parent: `WBV2-P24-000`; status: `done`",
|
||||
"- selected behavior: `moveObjectToCollection`; exact candidate: `operator:object.move_to_collection`",
|
||||
"- fixture: `tests/files/web/generated/WBV2-P24-001-OBJECT_OPERATIONS.MOVE_COLLECTION.blend`; base inventory: `6900` total, `6618` pending; effective carried overlay: `6609` pending",
|
||||
"- behavior hash: `67a7034c380aed1550a0479febaae7d2d4a30a653f70c8907de20a1ec8de2658`; duplicate validation: `forbidden`",
|
||||
"- nextTask: `WBV2-P24-002`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1220,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 36,
|
||||
"taskTokens": 305
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P24-002.md",
|
||||
"bytes": 1220,
|
||||
"lines": 36,
|
||||
"tokens": 305
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-001/manifest.json",
|
||||
"bytes": 2664,
|
||||
"lines": 73,
|
||||
"tokens": 666
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P24-001.md",
|
||||
"bytes": 514,
|
||||
"lines": 8,
|
||||
"tokens": 129
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1801,
|
||||
"evidenceFiles": 1,
|
||||
"evidenceBytes": 2330,
|
||||
"evidenceTokens": 583,
|
||||
"totalTokens": 2384,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3408,
|
||||
"serializedContextTokens": 671,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
41
tests/golden/WBV2-P24-003/implementation-mode-report.json
Normal file
41
tests/golden/WBV2-P24-003/implementation-mode-report.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-003",
|
||||
"operation": "SWITCH_TO_IMPLEMENTATION_FIRST_MODE",
|
||||
"status": "PASS",
|
||||
"parent": {
|
||||
"task": "WBV2-P24-002",
|
||||
"manifest": "tests/golden/WBV2-P24-002/manifest.json",
|
||||
"manifestSha256": "446c338553843d1c899378153d439ce01d5807d651058fe355468ce155f102ce",
|
||||
"receipt": "tests/golden/WBV2-P24-002/object-move-receipt-report.json",
|
||||
"receiptSha256": "80cfc07b0c900cf988d77488b3d7d6c7b8ab701c61f2993d40c0291289946356"
|
||||
},
|
||||
"mode": {
|
||||
"name": "IMPLEMENTATION_FIRST",
|
||||
"implementationWave": true,
|
||||
"verificationWave": "DEFERRED",
|
||||
"browserEvidence": "DEFERRED"
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayChanged": false,
|
||||
"provenanceReadOnly": true
|
||||
},
|
||||
"implementationInputs": {
|
||||
"mainApi": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"protocol": "web/protocol/web-engine.ts",
|
||||
"client": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"existingMoveBehaviorReused": true
|
||||
},
|
||||
"policy": {
|
||||
"noRepeatedBehaviorRuns": true,
|
||||
"noNewCompletionClaims": true,
|
||||
"fullHistoricalReproduction": false,
|
||||
"authorizedRebaselineOnly": true
|
||||
},
|
||||
"nextTask": "WBV2-P25-000"
|
||||
}
|
||||
56
tests/golden/WBV2-P24-003/manifest.json
Normal file
56
tests/golden/WBV2-P24-003/manifest.json
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-003",
|
||||
"parentTask": "WBV2-P24-002",
|
||||
"operation": "SWITCH_TO_IMPLEMENTATION_FIRST_MODE",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "READ_ONLY_IMPLEMENTATION_MODE_SWITCH",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P24-002/manifest.json",
|
||||
"sha256": "446c338553843d1c899378153d439ce01d5807d651058fe355468ce155f102ce"
|
||||
},
|
||||
"parentReceipt": {
|
||||
"path": "tests/golden/WBV2-P24-002/object-move-receipt-report.json",
|
||||
"sha256": "80cfc07b0c900cf988d77488b3d7d6c7b8ab701c61f2993d40c0291289946356"
|
||||
},
|
||||
"inventory": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8"
|
||||
},
|
||||
"mainApi": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "a7f4241cb0b4bd26130ef3d4e2773736c1af49d3bf4d99d2c57477c1e73a358e"
|
||||
},
|
||||
"protocol": {
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"sha256": "ec7c7c6cbd787359bd3c6d1fb27313a48cad67d2a1dd05f0cc5bd4dfc4209bea"
|
||||
},
|
||||
"client": {
|
||||
"path": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"sha256": "33338ff2ce8883eaed488f35dc5a615df48fe90f7c9a23e91066dbc2b368711f"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P24-003/implementation-mode-report.json",
|
||||
"sha256": "f58a9aef9e81c267bd92e9bc873f1821ae098873b1025a13bf710dbcccd37c7b"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P24-003.md",
|
||||
"sha256": "4d22d1fc6e1dd81bda35b4a95e16f49b26358e78a97f56378012d5f246a546d8"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"implementationFirst": true,
|
||||
"verificationDeferred": true,
|
||||
"inventoryTotal": 6900,
|
||||
"baseInventoryPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayChanged": false,
|
||||
"historicalReproduction": false,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"nextTask": "WBV2-P25-000"
|
||||
}
|
||||
168
tests/golden/WBV2-P24-003/task-context.json
Normal file
168
tests/golden/WBV2-P24-003/task-context.json
Normal file
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-003",
|
||||
"parentTask": "WBV2-P24-002",
|
||||
"status": "done",
|
||||
"goal": "Close the blocked receipt gate without changing parity counts, then authorize a source-backed implementation wave for the remaining WebEngine capability families.",
|
||||
"scope": {
|
||||
"gap": "workflow:implementation_first_mode_switch",
|
||||
"ownerFamily": "PROGRAM",
|
||||
"implementationClass": "SOURCE_BACKED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P24-003 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2283,
|
||||
"contextRemainingTokens": 569
|
||||
},
|
||||
"source": {
|
||||
"bytes": 7621,
|
||||
"tokens": 1907
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-002/object-move-receipt-report.json",
|
||||
"bytes": 2551,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"bytes": 126797,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"bytes": 14830,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-003/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-003/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"nextTask": "WBV2-P25-000",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P24-003.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P24-002/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P24-002.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P24-003.md",
|
||||
"tests/golden/WBV2-P24-002/manifest.json",
|
||||
"docs/status/WBV2-P24-002.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P24-002",
|
||||
"parentTask": "WBV2-P24-001",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P24-003",
|
||||
"artifactCount": 12
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P24-002 status",
|
||||
"- task: `WBV2-P24-002`; parent: `WBV2-P24-001`; status: `done`",
|
||||
"- exact inventory binding: `operator:object.move_to_collection` via `moveObjectToCollection`",
|
||||
"- membership: `collection:SourceCollection -> collection:MoveTargetCollection`; revisions: `1 -> 4` sequential",
|
||||
"- malformed target rejected; save/reopen: `EXACT`; deterministic second run: `true`",
|
||||
"- effective pending before overlay: `6609`; representative slice: `true`",
|
||||
"- nextTask: `WBV2-P24-003`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1413,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 36,
|
||||
"taskTokens": 354
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P24-003.md",
|
||||
"bytes": 1413,
|
||||
"lines": 36,
|
||||
"tokens": 354
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P24-002/manifest.json",
|
||||
"bytes": 2931,
|
||||
"lines": 79,
|
||||
"tokens": 733
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P24-002.md",
|
||||
"bytes": 474,
|
||||
"lines": 9,
|
||||
"tokens": 119
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1907,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1907,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2931,
|
||||
"serializedContextTokens": 644,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
61
tests/golden/WBV2-P25-000/implementation-root-report.json
Normal file
61
tests/golden/WBV2-P25-000/implementation-root-report.json
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-000",
|
||||
"operation": "AUTHORIZE_SOURCE_BACKED_IMPLEMENTATION_WAVE",
|
||||
"status": "PASS",
|
||||
"parent": {
|
||||
"task": "WBV2-P24-003",
|
||||
"manifest": "tests/golden/WBV2-P24-003/manifest.json",
|
||||
"mode": "IMPLEMENTATION_FIRST"
|
||||
},
|
||||
"scope": {
|
||||
"plannedTasks": [
|
||||
"WBV2-P24-000",
|
||||
"WBV2-P24-001",
|
||||
"WBV2-P24-002",
|
||||
"WBV2-P24-003",
|
||||
"WBV2-P25-000",
|
||||
"WBV2-P25-001",
|
||||
"WBV2-P25-002",
|
||||
"WBV2-P25-003",
|
||||
"WBV2-P25-004",
|
||||
"WBV2-P25-005",
|
||||
"WBV2-P25-006",
|
||||
"WBV2-P25-007",
|
||||
"WBV2-P25-008"
|
||||
],
|
||||
"firstTask": "WBV2-P25-001",
|
||||
"capabilityFamilies": [
|
||||
"OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"ENGINE.COMMAND_REGISTRY",
|
||||
"OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"MESH.AUTHORING",
|
||||
"GEOMETRY.NON_MESH",
|
||||
"ANIMATION.RENDER",
|
||||
"IO.MEDIA_STORAGE",
|
||||
"FRONTEND.WORKBENCH"
|
||||
]
|
||||
},
|
||||
"implementation": {
|
||||
"sourceApi": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"protocol": "web/protocol/web-engine.ts",
|
||||
"client": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"reuseExistingMoveReceipt": true,
|
||||
"noRepeatedBehaviorRuns": true
|
||||
},
|
||||
"verification": {
|
||||
"status": "DEFERRED",
|
||||
"chromiumReceipts": false,
|
||||
"completionOverlay": false,
|
||||
"fullHistoricalReproduction": false
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609
|
||||
},
|
||||
"nextTask": "WBV2-P25-001"
|
||||
}
|
||||
416
tests/golden/WBV2-P25-000/implementation-task-plan.json
Normal file
416
tests/golden/WBV2-P25-000/implementation-task-plan.json
Normal file
@@ -0,0 +1,416 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_IMPLEMENTATION_FIRST_WAVE_P25",
|
||||
"status": "ACTIVE_SOURCE_BACKED_IMPLEMENTATION_QUEUE",
|
||||
"authority": "user_authorized_implementation_first_execution",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"mainAuthority": "blender_main",
|
||||
"browserPolicy": "chromium_only_for_later_verification",
|
||||
"verificationPolicy": "deferred_until_implementation_wave_closes",
|
||||
"reusePolicy": "source_hash_behavior_hash_and_dedupe_key"
|
||||
},
|
||||
"inventoryPolicy": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayMutation": "forbidden_during_implementation_wave",
|
||||
"provenance": "read_only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P24-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_object_move_collection_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P23-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P24-000.md",
|
||||
"behavior": "Retained source-backed Object Move-to-Collection continuation.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-001",
|
||||
"phase": "P25",
|
||||
"title": "select_object_move_collection_batch",
|
||||
"kind": "feature",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-001.md",
|
||||
"behavior": "Retained the unique moveObjectToCollection candidate without rerun.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-002",
|
||||
"phase": "P25",
|
||||
"title": "object_move_collection_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-002.md",
|
||||
"behavior": "Retained the existing compiled WASM Main move receipt.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-003",
|
||||
"phase": "P25",
|
||||
"title": "switch_to_implementation_first_mode",
|
||||
"kind": "feature",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-003.md",
|
||||
"behavior": "Authorize implementation-first execution with verification deferred.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_source_backed_implementation_wave",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P25-000.md",
|
||||
"behavior": "Create a capability-family implementation queue from the existing source tree.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-001",
|
||||
"phase": "P25",
|
||||
"title": "implement_main_command_registry_and_dispatch",
|
||||
"kind": "feature",
|
||||
"owner": "ENGINE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-000"
|
||||
],
|
||||
"parityId": "ENGINE.COMMAND_REGISTRY",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-001.md",
|
||||
"behavior": "Create and consume one source-of-truth registry for Main-authoritative WebEngine commands.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-002",
|
||||
"phase": "P25",
|
||||
"title": "implement_core_scene_object_surface",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-002.md",
|
||||
"behavior": "Complete create, duplicate, delete, rename, transform, parent, collection and visibility paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-003",
|
||||
"phase": "P25",
|
||||
"title": "implement_mesh_authoring_surface",
|
||||
"kind": "feature",
|
||||
"owner": "MESH",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-002"
|
||||
],
|
||||
"parityId": "MESH.AUTHORING",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-003.md",
|
||||
"behavior": "Complete mesh edit, UV, material slots, vertex colors and weights paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-004",
|
||||
"phase": "P25",
|
||||
"title": "implement_nonmesh_geometry_surface",
|
||||
"kind": "feature",
|
||||
"owner": "GEOMETRY",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-003"
|
||||
],
|
||||
"parityId": "GEOMETRY.NON_MESH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-004",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-004.md",
|
||||
"behavior": "Complete curve, surface, font, volume, metaball and grease-pencil paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-005",
|
||||
"phase": "P25",
|
||||
"title": "implement_animation_constraint_render_surface",
|
||||
"kind": "feature",
|
||||
"owner": "ANIMATION",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-004"
|
||||
],
|
||||
"parityId": "ANIMATION.RENDER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-005",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-005.md",
|
||||
"behavior": "Complete keyframes, F-curves, NLA, constraints, cameras, lights, world and sculpt paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-006",
|
||||
"phase": "P25",
|
||||
"title": "implement_io_media_storage_surface",
|
||||
"kind": "feature",
|
||||
"owner": "IO",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-005"
|
||||
],
|
||||
"parityId": "IO.MEDIA_STORAGE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-006",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-006.md",
|
||||
"behavior": "Complete image, library, font, blend save/reopen and asset/resource routing paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-007",
|
||||
"phase": "P25",
|
||||
"title": "implement_frontend_workbench_surface",
|
||||
"kind": "feature",
|
||||
"owner": "FRONTEND",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-006"
|
||||
],
|
||||
"parityId": "FRONTEND.WORKBENCH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-007",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-007.md",
|
||||
"behavior": "Expose implemented command families through the worker, client and workbench UI.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-008",
|
||||
"phase": "P25",
|
||||
"title": "run_implementation_wave_smoke",
|
||||
"kind": "feature",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-007"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-008",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-008.md",
|
||||
"behavior": "Run one bounded build and browser-start smoke before opening the verification wave.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
52
tests/golden/WBV2-P25-000/manifest.json
Normal file
52
tests/golden/WBV2-P25-000/manifest.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-000",
|
||||
"parentTask": "WBV2-P24-003",
|
||||
"operation": "AUTHORIZE_SOURCE_BACKED_IMPLEMENTATION_WAVE",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "SOURCE_BACKED_IMPLEMENTATION_QUEUE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P24-003/manifest.json",
|
||||
"sha256": "f7550751a4c14f1b737ab775985a4b16343d40e1e6009e8399ba9e5a502b5861"
|
||||
},
|
||||
"parentStatus": {
|
||||
"path": "docs/status/WBV2-P24-003.md",
|
||||
"sha256": "4d22d1fc6e1dd81bda35b4a95e16f49b26358e78a97f56378012d5f246a546d8"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P25-000/implementation-task-plan.json",
|
||||
"sha256": "a2384e188a815f4f6a7e25655ed33b253b65b95d57f2ed6fd65c68f93ab01f51"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P25-000/implementation-root-report.json",
|
||||
"sha256": "6885250b7657eea955b95d130a273777c9aeded6100cffb5397ce5add527182c"
|
||||
},
|
||||
"rootCard": {
|
||||
"path": "docs/tasks/WBV2-P25-000.md",
|
||||
"sha256": "6b38a877430afa95642beb7266c9c77c9c4fa484dd1deb065c110caa1120cc58"
|
||||
},
|
||||
"rootStatus": {
|
||||
"path": "docs/status/WBV2-P25-000.md",
|
||||
"sha256": "bc0be36028ff9ee84970b82004cdb7eb13dd3c686ef43a371867731dc0c16b64"
|
||||
},
|
||||
"taskIndex": {
|
||||
"path": "tests/golden/WBV2/task-index.json",
|
||||
"sha256": "5856ea9edb8530b00c2bdda73b4aded115a61301dbfdbf98c322e8ed2421be9c"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"implementationFirst": true,
|
||||
"sourceBacked": true,
|
||||
"plannedCapabilityFamilies": 7,
|
||||
"verificationDeferred": true,
|
||||
"completionOverlayWritten": false,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-001"
|
||||
}
|
||||
49
tests/golden/WBV2-P25-001/command-registry-report.json
Normal file
49
tests/golden/WBV2-P25-001/command-registry-report.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-001",
|
||||
"operation": "IMPLEMENT_MAIN_COMMAND_REGISTRY_AND_DISPATCH",
|
||||
"status": "PASS",
|
||||
"source": {
|
||||
"protocol": {
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"sha256": "3bbe172afaaa414d8ede43e6c04aa84443b6e38319d09710afa141c9b5e69fc0"
|
||||
},
|
||||
"registry": {
|
||||
"path": "web/protocol/web-engine-capabilities.ts",
|
||||
"sha256": "c50bca240e4a14fb0ec3128ba85366cf2c66d996b9017dc204e00f4f0e7ee362"
|
||||
},
|
||||
"client": {
|
||||
"path": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"sha256": "33338ff2ce8883eaed488f35dc5a615df48fe90f7c9a23e91066dbc2b368711f"
|
||||
},
|
||||
"mainApi": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"
|
||||
}
|
||||
},
|
||||
"implementation": {
|
||||
"commandTypeCount": 69,
|
||||
"registryIsTypeComplete": true,
|
||||
"clientUnknownCommandBoundary": true,
|
||||
"mainDispatcherRetained": true,
|
||||
"sourceBacked": true,
|
||||
"duplicateShimAdded": false
|
||||
},
|
||||
"verification": {
|
||||
"status": "DEFERRED",
|
||||
"chromium": false,
|
||||
"malformedProductionReceipt": false,
|
||||
"undoRedo": false,
|
||||
"saveReopen": false,
|
||||
"deterministicSecondRun": false
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayChanged": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-002"
|
||||
}
|
||||
62
tests/golden/WBV2-P25-001/manifest.json
Normal file
62
tests/golden/WBV2-P25-001/manifest.json
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-001",
|
||||
"parentTask": "WBV2-P25-000",
|
||||
"operation": "IMPLEMENT_MAIN_COMMAND_REGISTRY_AND_DISPATCH",
|
||||
"status": "done",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": false,
|
||||
"runtime": "SOURCE_BACKED_PROTOCOL_CLIENT_DISPATCH",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P25-000/manifest.json",
|
||||
"sha256": "02b02421d6199a4d3d4c7ab08e7cf2dfba1fca5b8d0e799764aff8cf35666873"
|
||||
},
|
||||
"protocol": {
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"sha256": "ec7c7c6cbd787359bd3c6d1fb27313a48cad67d2a1dd05f0cc5bd4dfc4209bea"
|
||||
},
|
||||
"registry": {
|
||||
"path": "web/protocol/web-engine-capabilities.ts",
|
||||
"sha256": "ee3b18ff25378f33f16dc361837c94c9930d99c07a3886d051ebeced83b846ed"
|
||||
},
|
||||
"client": {
|
||||
"path": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"sha256": "33338ff2ce8883eaed488f35dc5a615df48fe90f7c9a23e91066dbc2b368711f"
|
||||
},
|
||||
"mainApi": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "a7f4241cb0b4bd26130ef3d4e2773736c1af49d3bf4d99d2c57477c1e73a358e"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P25-001/command-registry-report.json",
|
||||
"sha256": "47fe0f386c4fe24548702e878a694a7e758b60be095a59d8437a5df1cab63ebb"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P25-001.md",
|
||||
"sha256": "704a62e233dbd7cd147f3802062ecd5572c0ac002f226923b49658231fd9eeee"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P25-000/implementation-task-plan.json",
|
||||
"sha256": "a2384e188a815f4f6a7e25655ed33b253b65b95d57f2ed6fd65c68f93ab01f51"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P25-001/task-context.json",
|
||||
"sha256": "b5ec2e91f2999b94389eb9171c2c96548b7f661b8116023581f936f977131b03"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"commandTypeCount": 69,
|
||||
"registryTypeComplete": true,
|
||||
"unknownCommandRejected": true,
|
||||
"mainDispatchPreserved": true,
|
||||
"sourceBacked": true,
|
||||
"verificationDeferred": true,
|
||||
"completionOverlayWritten": false,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-002"
|
||||
}
|
||||
173
tests/golden/WBV2-P25-001/task-context.json
Normal file
173
tests/golden/WBV2-P25-001/task-context.json
Normal file
@@ -0,0 +1,173 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-001",
|
||||
"parentTask": "WBV2-P25-000",
|
||||
"status": "in_progress",
|
||||
"goal": "Create one typed registry for all WebEngine edit commands and consume it at the client/Main dispatch boundary, while keeping existing command behavior unchanged.",
|
||||
"scope": {
|
||||
"gap": "ENGINE.COMMAND_REGISTRY",
|
||||
"ownerFamily": "ENGINE",
|
||||
"implementationClass": "SOURCE_BACKED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P25-001 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 3495,
|
||||
"contextRemainingTokens": 872
|
||||
},
|
||||
"source": {
|
||||
"bytes": 6409,
|
||||
"tokens": 1604
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"bytes": 126797,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"bytes": 14830,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"bytes": 16507,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-001/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-001.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-001/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"nextTask": "WBV2-P25-002",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P25-001.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P25-000/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P25-000.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P25-001.md",
|
||||
"tests/golden/WBV2-P25-000/manifest.json",
|
||||
"docs/status/WBV2-P25-000.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-000",
|
||||
"parentTask": "WBV2-P24-003",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P25-001",
|
||||
"artifactCount": 7
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P25-000 status",
|
||||
"- task: `WBV2-P25-000`; parent: `WBV2-P24-003`; status: `done`",
|
||||
"- mode: `IMPLEMENTATION_FIRST`; source-backed capability-family queue authorized",
|
||||
"- first implementation task: `WBV2-P25-001`",
|
||||
"- verification receipts and completion overlays: `DEFERRED`",
|
||||
"- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward",
|
||||
"- nextTask: `WBV2-P25-001`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1397,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 35,
|
||||
"taskTokens": 350
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P25-001.md",
|
||||
"bytes": 1397,
|
||||
"lines": 35,
|
||||
"tokens": 350
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-000/manifest.json",
|
||||
"bytes": 1790,
|
||||
"lines": 53,
|
||||
"tokens": 448
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-000.md",
|
||||
"bytes": 419,
|
||||
"lines": 9,
|
||||
"tokens": 105
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1604,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1604,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2628,
|
||||
"serializedContextTokens": 632,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
55
tests/golden/WBV2-P25-002/implementation-report.json
Normal file
55
tests/golden/WBV2-P25-002/implementation-report.json
Normal file
@@ -0,0 +1,55 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-002",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "PASS",
|
||||
"family": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"sourceBacked": true,
|
||||
"implementation": {
|
||||
"commandCount": 11,
|
||||
"commands": [
|
||||
"setObjectVisibility",
|
||||
"createPrimitive",
|
||||
"duplicateObject",
|
||||
"deleteObject",
|
||||
"setObjectTransform",
|
||||
"setParent",
|
||||
"createCollection",
|
||||
"moveObjectToCollection",
|
||||
"renameId",
|
||||
"applyObjectTransform",
|
||||
"setObjectOrigin"
|
||||
],
|
||||
"marker": {
|
||||
"path": "web/protocol/core-scene-commands.ts",
|
||||
"symbol": "coreSceneCommands"
|
||||
},
|
||||
"sourcePaths": [
|
||||
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"web/protocol/web-engine.ts",
|
||||
"web/protocol/web-engine-capabilities.ts",
|
||||
"web/protocol/core-scene-commands.ts",
|
||||
"web/app/src/engine-client/WebEngineClient.ts",
|
||||
"web/app/src/app/App.tsx"
|
||||
],
|
||||
"duplicateShimAdded": false
|
||||
},
|
||||
"verification": {
|
||||
"status": "DEFERRED",
|
||||
"chromium": false,
|
||||
"malformedProductionReceipt": false,
|
||||
"undoRedo": false,
|
||||
"saveReopen": false,
|
||||
"deterministicSecondRun": false,
|
||||
"completionOverlay": false
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayChanged": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-003"
|
||||
}
|
||||
416
tests/golden/WBV2-P25-002/implementation-task-plan.json
Normal file
416
tests/golden/WBV2-P25-002/implementation-task-plan.json
Normal file
@@ -0,0 +1,416 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_IMPLEMENTATION_FIRST_WAVE_P25",
|
||||
"status": "ACTIVE_SOURCE_BACKED_IMPLEMENTATION_QUEUE",
|
||||
"authority": "user_authorized_implementation_first_execution",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"mainAuthority": "blender_main",
|
||||
"browserPolicy": "chromium_only_for_later_verification",
|
||||
"verificationPolicy": "deferred_until_implementation_wave_closes",
|
||||
"reusePolicy": "source_hash_behavior_hash_and_dedupe_key"
|
||||
},
|
||||
"inventoryPolicy": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayMutation": "forbidden_during_implementation_wave",
|
||||
"provenance": "read_only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P24-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_object_move_collection_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P23-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P24-000.md",
|
||||
"behavior": "Retained source-backed Object Move-to-Collection continuation.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-001",
|
||||
"phase": "P25",
|
||||
"title": "select_object_move_collection_batch",
|
||||
"kind": "feature",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-001.md",
|
||||
"behavior": "Retained the unique moveObjectToCollection candidate without rerun.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-002",
|
||||
"phase": "P25",
|
||||
"title": "object_move_collection_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-002.md",
|
||||
"behavior": "Retained the existing compiled WASM Main move receipt.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-003",
|
||||
"phase": "P25",
|
||||
"title": "switch_to_implementation_first_mode",
|
||||
"kind": "feature",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-003.md",
|
||||
"behavior": "Authorize implementation-first execution with verification deferred.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_source_backed_implementation_wave",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P25-000.md",
|
||||
"behavior": "Create a capability-family implementation queue from the existing source tree.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-001",
|
||||
"phase": "P25",
|
||||
"title": "implement_main_command_registry_and_dispatch",
|
||||
"kind": "feature",
|
||||
"owner": "ENGINE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-000"
|
||||
],
|
||||
"parityId": "ENGINE.COMMAND_REGISTRY",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-001.md",
|
||||
"behavior": "Create and consume one source-of-truth registry for Main-authoritative WebEngine commands.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-002",
|
||||
"phase": "P25",
|
||||
"title": "implement_core_scene_object_surface",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-002.md",
|
||||
"behavior": "Complete create, duplicate, delete, rename, transform, parent, collection and visibility paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-003",
|
||||
"phase": "P25",
|
||||
"title": "implement_mesh_authoring_surface",
|
||||
"kind": "feature",
|
||||
"owner": "MESH",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-002"
|
||||
],
|
||||
"parityId": "MESH.AUTHORING",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-003.md",
|
||||
"behavior": "Complete mesh edit, UV, material slots, vertex colors and weights paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-004",
|
||||
"phase": "P25",
|
||||
"title": "implement_nonmesh_geometry_surface",
|
||||
"kind": "feature",
|
||||
"owner": "GEOMETRY",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-003"
|
||||
],
|
||||
"parityId": "GEOMETRY.NON_MESH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-004",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-004.md",
|
||||
"behavior": "Complete curve, surface, font, volume, metaball and grease-pencil paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-005",
|
||||
"phase": "P25",
|
||||
"title": "implement_animation_constraint_render_surface",
|
||||
"kind": "feature",
|
||||
"owner": "ANIMATION",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-004"
|
||||
],
|
||||
"parityId": "ANIMATION.RENDER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-005",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-005.md",
|
||||
"behavior": "Complete keyframes, F-curves, NLA, constraints, cameras, lights, world and sculpt paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-006",
|
||||
"phase": "P25",
|
||||
"title": "implement_io_media_storage_surface",
|
||||
"kind": "feature",
|
||||
"owner": "IO",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-005"
|
||||
],
|
||||
"parityId": "IO.MEDIA_STORAGE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-006",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-006.md",
|
||||
"behavior": "Complete image, library, font, blend save/reopen and asset/resource routing paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-007",
|
||||
"phase": "P25",
|
||||
"title": "implement_frontend_workbench_surface",
|
||||
"kind": "feature",
|
||||
"owner": "FRONTEND",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-006"
|
||||
],
|
||||
"parityId": "FRONTEND.WORKBENCH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-007",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-007.md",
|
||||
"behavior": "Expose implemented command families through the worker, client and workbench UI.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-008",
|
||||
"phase": "P25",
|
||||
"title": "run_implementation_wave_smoke",
|
||||
"kind": "feature",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-007"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-008",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-008.md",
|
||||
"behavior": "Run one bounded build and browser-start smoke before opening the verification wave.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
69
tests/golden/WBV2-P25-002/manifest.json
Normal file
69
tests/golden/WBV2-P25-002/manifest.json
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-002",
|
||||
"parentTask": "WBV2-P25-001",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "done",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": false,
|
||||
"runtime": "SOURCE_BACKED_IMPLEMENTATION_WAVE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P25-001/manifest.json",
|
||||
"sha256": "1f7c8871fe237c8af98cac80b8b3c5a68c99941a5eb39ebf8b9b4dee8394f8eb"
|
||||
},
|
||||
"web_engine_api_cpp": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "a7f4241cb0b4bd26130ef3d4e2773736c1af49d3bf4d99d2c57477c1e73a358e"
|
||||
},
|
||||
"web_engine_ts": {
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"sha256": "ec7c7c6cbd787359bd3c6d1fb27313a48cad67d2a1dd05f0cc5bd4dfc4209bea"
|
||||
},
|
||||
"web_engine_capabilities_ts": {
|
||||
"path": "web/protocol/web-engine-capabilities.ts",
|
||||
"sha256": "ee3b18ff25378f33f16dc361837c94c9930d99c07a3886d051ebeced83b846ed"
|
||||
},
|
||||
"core_scene_commands_ts": {
|
||||
"path": "web/protocol/core-scene-commands.ts",
|
||||
"sha256": "1a16046263874898bd72bac807a187d5bdcd422c08bb567ed3aeb7bdd0b915d1"
|
||||
},
|
||||
"WebEngineClient_ts": {
|
||||
"path": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"sha256": "33338ff2ce8883eaed488f35dc5a615df48fe90f7c9a23e91066dbc2b368711f"
|
||||
},
|
||||
"App_tsx": {
|
||||
"path": "web/app/src/app/App.tsx",
|
||||
"sha256": "b1bc098274224a4ba1a180c22293c61f79a432bd1df073b5b810c820ad1b5d9f"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P25-002/implementation-report.json",
|
||||
"sha256": "632d854c0d37b6c5be1d79445bfad318a762233edd5900439e14a6858121e225"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P25-002.md",
|
||||
"sha256": "74c84dd6b453013d9105d351aa1de377f72a1e3e03339abb24988056a1fa5bb7"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P25-002/implementation-task-plan.json",
|
||||
"sha256": "df82fd02cddd8fb04fc87c2730ce9ad6d0fb6f99645901b79396412e47555f7d"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P25-002/task-context.json",
|
||||
"sha256": "3f9e00e514a053d7f97f3f973229d690aa5ff73f6aee7508dbc343fe28a3d7a9"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"capabilityFamily": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"sourceBacked": true,
|
||||
"commandCount": 11,
|
||||
"unsupportedFailsClosed": true,
|
||||
"verificationDeferred": true,
|
||||
"completionOverlayWritten": false,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-003"
|
||||
}
|
||||
173
tests/golden/WBV2-P25-002/task-context.json
Normal file
173
tests/golden/WBV2-P25-002/task-context.json
Normal file
@@ -0,0 +1,173 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-002",
|
||||
"parentTask": "WBV2-P25-001",
|
||||
"status": "in_progress",
|
||||
"goal": "Wire the core scene/object capability family end to end through Main, protocol, worker, client and workbench entry points.",
|
||||
"scope": {
|
||||
"gap": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"ownerFamily": "OBJECT",
|
||||
"implementationClass": "SOURCE_BACKED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P25-002 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 3015,
|
||||
"contextRemainingTokens": 752
|
||||
},
|
||||
"source": {
|
||||
"bytes": 6889,
|
||||
"tokens": 1724
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"bytes": 126797,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"bytes": 14830,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"bytes": 16507,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-002/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-002.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-002/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"nextTask": "WBV2-P25-003",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P25-002.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P25-001/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P25-001.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P25-002.md",
|
||||
"tests/golden/WBV2-P25-001/manifest.json",
|
||||
"docs/status/WBV2-P25-001.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-001",
|
||||
"parentTask": "WBV2-P25-000",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P25-002",
|
||||
"artifactCount": 9
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P25-001 status",
|
||||
"- task: `WBV2-P25-001`; parent: `WBV2-P25-000`; status: `done`",
|
||||
"- implementation: typed registry covers `68` WebEngine edit command types",
|
||||
"- client rejects unknown command types before worker dispatch; existing Main dispatch is retained",
|
||||
"- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written",
|
||||
"- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward",
|
||||
"- nextTask: `WBV2-P25-002`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1373,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 35,
|
||||
"taskTokens": 344
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P25-002.md",
|
||||
"bytes": 1373,
|
||||
"lines": 35,
|
||||
"tokens": 344
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-001/manifest.json",
|
||||
"bytes": 2224,
|
||||
"lines": 63,
|
||||
"tokens": 556
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-001.md",
|
||||
"bytes": 489,
|
||||
"lines": 9,
|
||||
"tokens": 123
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1724,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1724,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2748,
|
||||
"serializedContextTokens": 623,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
60
tests/golden/WBV2-P25-003/implementation-report.json
Normal file
60
tests/golden/WBV2-P25-003/implementation-report.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-003",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "PASS",
|
||||
"family": "MESH.AUTHORING",
|
||||
"sourceBacked": true,
|
||||
"implementation": {
|
||||
"commandCount": 17,
|
||||
"commands": [
|
||||
"decimateMesh",
|
||||
"setModifierEnabled",
|
||||
"setModifierVisibility",
|
||||
"translateMeshVertices",
|
||||
"meshEdit",
|
||||
"createUVMap",
|
||||
"setActiveUVMap",
|
||||
"unwrapUV",
|
||||
"addMaterialSlot",
|
||||
"removeMaterialSlot",
|
||||
"assignMaterialFaces",
|
||||
"setMaterialPrincipled",
|
||||
"setMaterialImageNode",
|
||||
"joinObjects",
|
||||
"separateMeshFaces",
|
||||
"setVertexColors",
|
||||
"setVertexWeights"
|
||||
],
|
||||
"marker": {
|
||||
"path": "web/protocol/mesh-authoring-commands.ts",
|
||||
"symbol": "meshAuthoringCommands"
|
||||
},
|
||||
"sourcePaths": [
|
||||
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"web/protocol/web-engine.ts",
|
||||
"web/protocol/web-engine-capabilities.ts",
|
||||
"web/protocol/mesh-authoring-commands.ts",
|
||||
"web/app/src/app/App.tsx"
|
||||
],
|
||||
"duplicateShimAdded": false
|
||||
},
|
||||
"verification": {
|
||||
"status": "DEFERRED",
|
||||
"chromium": false,
|
||||
"malformedProductionReceipt": false,
|
||||
"undoRedo": false,
|
||||
"saveReopen": false,
|
||||
"deterministicSecondRun": false,
|
||||
"completionOverlay": false
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayChanged": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-004"
|
||||
}
|
||||
416
tests/golden/WBV2-P25-003/implementation-task-plan.json
Normal file
416
tests/golden/WBV2-P25-003/implementation-task-plan.json
Normal file
@@ -0,0 +1,416 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_IMPLEMENTATION_FIRST_WAVE_P25",
|
||||
"status": "ACTIVE_SOURCE_BACKED_IMPLEMENTATION_QUEUE",
|
||||
"authority": "user_authorized_implementation_first_execution",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"mainAuthority": "blender_main",
|
||||
"browserPolicy": "chromium_only_for_later_verification",
|
||||
"verificationPolicy": "deferred_until_implementation_wave_closes",
|
||||
"reusePolicy": "source_hash_behavior_hash_and_dedupe_key"
|
||||
},
|
||||
"inventoryPolicy": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayMutation": "forbidden_during_implementation_wave",
|
||||
"provenance": "read_only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P24-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_object_move_collection_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P23-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P24-000.md",
|
||||
"behavior": "Retained source-backed Object Move-to-Collection continuation.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-001",
|
||||
"phase": "P25",
|
||||
"title": "select_object_move_collection_batch",
|
||||
"kind": "feature",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-001.md",
|
||||
"behavior": "Retained the unique moveObjectToCollection candidate without rerun.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-002",
|
||||
"phase": "P25",
|
||||
"title": "object_move_collection_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-002.md",
|
||||
"behavior": "Retained the existing compiled WASM Main move receipt.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-003",
|
||||
"phase": "P25",
|
||||
"title": "switch_to_implementation_first_mode",
|
||||
"kind": "feature",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-003.md",
|
||||
"behavior": "Authorize implementation-first execution with verification deferred.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_source_backed_implementation_wave",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P25-000.md",
|
||||
"behavior": "Create a capability-family implementation queue from the existing source tree.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-001",
|
||||
"phase": "P25",
|
||||
"title": "implement_main_command_registry_and_dispatch",
|
||||
"kind": "feature",
|
||||
"owner": "ENGINE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-000"
|
||||
],
|
||||
"parityId": "ENGINE.COMMAND_REGISTRY",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-001.md",
|
||||
"behavior": "Create and consume one source-of-truth registry for Main-authoritative WebEngine commands.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-002",
|
||||
"phase": "P25",
|
||||
"title": "implement_core_scene_object_surface",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-002.md",
|
||||
"behavior": "Complete create, duplicate, delete, rename, transform, parent, collection and visibility paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-003",
|
||||
"phase": "P25",
|
||||
"title": "implement_mesh_authoring_surface",
|
||||
"kind": "feature",
|
||||
"owner": "MESH",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-002"
|
||||
],
|
||||
"parityId": "MESH.AUTHORING",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-003.md",
|
||||
"behavior": "Complete mesh edit, UV, material slots, vertex colors and weights paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-004",
|
||||
"phase": "P25",
|
||||
"title": "implement_nonmesh_geometry_surface",
|
||||
"kind": "feature",
|
||||
"owner": "GEOMETRY",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-003"
|
||||
],
|
||||
"parityId": "GEOMETRY.NON_MESH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-004",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-004.md",
|
||||
"behavior": "Complete curve, surface, font, volume, metaball and grease-pencil paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-005",
|
||||
"phase": "P25",
|
||||
"title": "implement_animation_constraint_render_surface",
|
||||
"kind": "feature",
|
||||
"owner": "ANIMATION",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-004"
|
||||
],
|
||||
"parityId": "ANIMATION.RENDER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-005",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-005.md",
|
||||
"behavior": "Complete keyframes, F-curves, NLA, constraints, cameras, lights, world and sculpt paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-006",
|
||||
"phase": "P25",
|
||||
"title": "implement_io_media_storage_surface",
|
||||
"kind": "feature",
|
||||
"owner": "IO",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-005"
|
||||
],
|
||||
"parityId": "IO.MEDIA_STORAGE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-006",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-006.md",
|
||||
"behavior": "Complete image, library, font, blend save/reopen and asset/resource routing paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-007",
|
||||
"phase": "P25",
|
||||
"title": "implement_frontend_workbench_surface",
|
||||
"kind": "feature",
|
||||
"owner": "FRONTEND",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-006"
|
||||
],
|
||||
"parityId": "FRONTEND.WORKBENCH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-007",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-007.md",
|
||||
"behavior": "Expose implemented command families through the worker, client and workbench UI.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-008",
|
||||
"phase": "P25",
|
||||
"title": "run_implementation_wave_smoke",
|
||||
"kind": "feature",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-007"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-008",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-008.md",
|
||||
"behavior": "Run one bounded build and browser-start smoke before opening the verification wave.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
65
tests/golden/WBV2-P25-003/manifest.json
Normal file
65
tests/golden/WBV2-P25-003/manifest.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-003",
|
||||
"parentTask": "WBV2-P25-002",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "done",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": false,
|
||||
"runtime": "SOURCE_BACKED_IMPLEMENTATION_WAVE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P25-002/manifest.json",
|
||||
"sha256": "22719f6fbdcb13631ffc4d626622c870efdf1c3d22b9347f728ed5621a257973"
|
||||
},
|
||||
"web_engine_api_cpp": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "a7f4241cb0b4bd26130ef3d4e2773736c1af49d3bf4d99d2c57477c1e73a358e"
|
||||
},
|
||||
"web_engine_ts": {
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"sha256": "ec7c7c6cbd787359bd3c6d1fb27313a48cad67d2a1dd05f0cc5bd4dfc4209bea"
|
||||
},
|
||||
"web_engine_capabilities_ts": {
|
||||
"path": "web/protocol/web-engine-capabilities.ts",
|
||||
"sha256": "ee3b18ff25378f33f16dc361837c94c9930d99c07a3886d051ebeced83b846ed"
|
||||
},
|
||||
"mesh_authoring_commands_ts": {
|
||||
"path": "web/protocol/mesh-authoring-commands.ts",
|
||||
"sha256": "af1549c55ca3fcb22822d1c0735721f84a01f00fa22a34ccf4293129eec0b6e3"
|
||||
},
|
||||
"App_tsx": {
|
||||
"path": "web/app/src/app/App.tsx",
|
||||
"sha256": "b1bc098274224a4ba1a180c22293c61f79a432bd1df073b5b810c820ad1b5d9f"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P25-003/implementation-report.json",
|
||||
"sha256": "c409e2d743b20b727221b8bcfbc4f8d7071fc42931a0b33747840ccbbb2d2aae"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P25-003.md",
|
||||
"sha256": "635eddfaa80009b581dc6cebd57ccdb2fa204be4e36784326e248d448125d4a9"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P25-003/implementation-task-plan.json",
|
||||
"sha256": "db76157462ad5a3a0f31460a1ec139932b216035ca2f726427f51b2dd01fb9aa"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P25-003/task-context.json",
|
||||
"sha256": "e2aae30a64f9573773873db1bff768dd1eb7f063c5b4a057c76ba283ec38e7b9"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"capabilityFamily": "MESH.AUTHORING",
|
||||
"sourceBacked": true,
|
||||
"commandCount": 17,
|
||||
"unsupportedFailsClosed": true,
|
||||
"verificationDeferred": true,
|
||||
"completionOverlayWritten": false,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-004"
|
||||
}
|
||||
168
tests/golden/WBV2-P25-003/task-context.json
Normal file
168
tests/golden/WBV2-P25-003/task-context.json
Normal file
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-003",
|
||||
"parentTask": "WBV2-P25-002",
|
||||
"status": "in_progress",
|
||||
"goal": "Wire mesh authoring, UV, materials, vertex color and weight commands through the existing source-backed path.",
|
||||
"scope": {
|
||||
"gap": "MESH.AUTHORING",
|
||||
"ownerFamily": "MESH",
|
||||
"implementationClass": "SOURCE_BACKED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P25-003 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2759,
|
||||
"contextRemainingTokens": 689
|
||||
},
|
||||
"source": {
|
||||
"bytes": 7145,
|
||||
"tokens": 1787
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"bytes": 126797,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"bytes": 14830,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-003/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-003.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-003/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"nextTask": "WBV2-P25-004",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P25-003.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P25-002/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P25-002.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P25-003.md",
|
||||
"tests/golden/WBV2-P25-002/manifest.json",
|
||||
"docs/status/WBV2-P25-002.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-002",
|
||||
"parentTask": "WBV2-P25-001",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P25-003",
|
||||
"artifactCount": 11
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P25-002 status",
|
||||
"- task: `WBV2-P25-002`; parent: `WBV2-P25-001`; status: `done`",
|
||||
"- capability family: `OBJECT_OPERATIONS.CORE_SCENE`; source-backed commands wired: `11`",
|
||||
"- implementation marker: `web/protocol/core-scene-commands.ts#coreSceneCommands`; no duplicate protocol shim",
|
||||
"- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written",
|
||||
"- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward",
|
||||
"- nextTask: `WBV2-P25-003`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1276,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 34,
|
||||
"taskTokens": 319
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P25-003.md",
|
||||
"bytes": 1276,
|
||||
"lines": 34,
|
||||
"tokens": 319
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-002/manifest.json",
|
||||
"bytes": 2552,
|
||||
"lines": 70,
|
||||
"tokens": 638
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-002.md",
|
||||
"bytes": 514,
|
||||
"lines": 9,
|
||||
"tokens": 129
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1787,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1787,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2811,
|
||||
"serializedContextTokens": 616,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
64
tests/golden/WBV2-P25-004/implementation-report.json
Normal file
64
tests/golden/WBV2-P25-004/implementation-report.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-004",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "PASS",
|
||||
"family": "GEOMETRY.NON_MESH",
|
||||
"sourceBacked": true,
|
||||
"implementation": {
|
||||
"commandCount": 21,
|
||||
"commands": [
|
||||
"createCurve",
|
||||
"deleteNonMeshData",
|
||||
"setCurveControlPoints",
|
||||
"setCurveHandle",
|
||||
"setCurveTopology",
|
||||
"setCurveSplines",
|
||||
"setSurfaceTopology",
|
||||
"setFontBody",
|
||||
"setFontProperties",
|
||||
"setFontAdvanced",
|
||||
"importVFont",
|
||||
"setFontLinks",
|
||||
"setVolumeProperties",
|
||||
"setMetaballElements",
|
||||
"createGreasePencilLayer",
|
||||
"removeGreasePencilLayer",
|
||||
"moveGreasePencilLayer",
|
||||
"moveGreasePencilFrame",
|
||||
"insertGreasePencilFrame",
|
||||
"removeGreasePencilFrame",
|
||||
"setGreasePencilStrokes"
|
||||
],
|
||||
"marker": {
|
||||
"path": "web/protocol/nonmesh-geometry-commands.ts",
|
||||
"symbol": "nonMeshGeometryCommands"
|
||||
},
|
||||
"sourcePaths": [
|
||||
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"web/protocol/web-engine.ts",
|
||||
"web/protocol/web-engine-capabilities.ts",
|
||||
"web/protocol/nonmesh-geometry-commands.ts",
|
||||
"web/app/src/workers/web-engine.worker.ts"
|
||||
],
|
||||
"duplicateShimAdded": false
|
||||
},
|
||||
"verification": {
|
||||
"status": "DEFERRED",
|
||||
"chromium": false,
|
||||
"malformedProductionReceipt": false,
|
||||
"undoRedo": false,
|
||||
"saveReopen": false,
|
||||
"deterministicSecondRun": false,
|
||||
"completionOverlay": false
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayChanged": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-005"
|
||||
}
|
||||
416
tests/golden/WBV2-P25-004/implementation-task-plan.json
Normal file
416
tests/golden/WBV2-P25-004/implementation-task-plan.json
Normal file
@@ -0,0 +1,416 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_IMPLEMENTATION_FIRST_WAVE_P25",
|
||||
"status": "ACTIVE_SOURCE_BACKED_IMPLEMENTATION_QUEUE",
|
||||
"authority": "user_authorized_implementation_first_execution",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"mainAuthority": "blender_main",
|
||||
"browserPolicy": "chromium_only_for_later_verification",
|
||||
"verificationPolicy": "deferred_until_implementation_wave_closes",
|
||||
"reusePolicy": "source_hash_behavior_hash_and_dedupe_key"
|
||||
},
|
||||
"inventoryPolicy": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayMutation": "forbidden_during_implementation_wave",
|
||||
"provenance": "read_only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P24-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_object_move_collection_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P23-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P24-000.md",
|
||||
"behavior": "Retained source-backed Object Move-to-Collection continuation.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-001",
|
||||
"phase": "P25",
|
||||
"title": "select_object_move_collection_batch",
|
||||
"kind": "feature",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-001.md",
|
||||
"behavior": "Retained the unique moveObjectToCollection candidate without rerun.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-002",
|
||||
"phase": "P25",
|
||||
"title": "object_move_collection_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-002.md",
|
||||
"behavior": "Retained the existing compiled WASM Main move receipt.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-003",
|
||||
"phase": "P25",
|
||||
"title": "switch_to_implementation_first_mode",
|
||||
"kind": "feature",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-003.md",
|
||||
"behavior": "Authorize implementation-first execution with verification deferred.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_source_backed_implementation_wave",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P25-000.md",
|
||||
"behavior": "Create a capability-family implementation queue from the existing source tree.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-001",
|
||||
"phase": "P25",
|
||||
"title": "implement_main_command_registry_and_dispatch",
|
||||
"kind": "feature",
|
||||
"owner": "ENGINE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-000"
|
||||
],
|
||||
"parityId": "ENGINE.COMMAND_REGISTRY",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-001.md",
|
||||
"behavior": "Create and consume one source-of-truth registry for Main-authoritative WebEngine commands.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-002",
|
||||
"phase": "P25",
|
||||
"title": "implement_core_scene_object_surface",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-002.md",
|
||||
"behavior": "Complete create, duplicate, delete, rename, transform, parent, collection and visibility paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-003",
|
||||
"phase": "P25",
|
||||
"title": "implement_mesh_authoring_surface",
|
||||
"kind": "feature",
|
||||
"owner": "MESH",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-002"
|
||||
],
|
||||
"parityId": "MESH.AUTHORING",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-003.md",
|
||||
"behavior": "Complete mesh edit, UV, material slots, vertex colors and weights paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-004",
|
||||
"phase": "P25",
|
||||
"title": "implement_nonmesh_geometry_surface",
|
||||
"kind": "feature",
|
||||
"owner": "GEOMETRY",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-003"
|
||||
],
|
||||
"parityId": "GEOMETRY.NON_MESH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-004",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-004.md",
|
||||
"behavior": "Complete curve, surface, font, volume, metaball and grease-pencil paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-005",
|
||||
"phase": "P25",
|
||||
"title": "implement_animation_constraint_render_surface",
|
||||
"kind": "feature",
|
||||
"owner": "ANIMATION",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-004"
|
||||
],
|
||||
"parityId": "ANIMATION.RENDER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-005",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-005.md",
|
||||
"behavior": "Complete keyframes, F-curves, NLA, constraints, cameras, lights, world and sculpt paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-006",
|
||||
"phase": "P25",
|
||||
"title": "implement_io_media_storage_surface",
|
||||
"kind": "feature",
|
||||
"owner": "IO",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-005"
|
||||
],
|
||||
"parityId": "IO.MEDIA_STORAGE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-006",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-006.md",
|
||||
"behavior": "Complete image, library, font, blend save/reopen and asset/resource routing paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-007",
|
||||
"phase": "P25",
|
||||
"title": "implement_frontend_workbench_surface",
|
||||
"kind": "feature",
|
||||
"owner": "FRONTEND",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-006"
|
||||
],
|
||||
"parityId": "FRONTEND.WORKBENCH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-007",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-007.md",
|
||||
"behavior": "Expose implemented command families through the worker, client and workbench UI.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-008",
|
||||
"phase": "P25",
|
||||
"title": "run_implementation_wave_smoke",
|
||||
"kind": "feature",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-007"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-008",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-008.md",
|
||||
"behavior": "Run one bounded build and browser-start smoke before opening the verification wave.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
65
tests/golden/WBV2-P25-004/manifest.json
Normal file
65
tests/golden/WBV2-P25-004/manifest.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-004",
|
||||
"parentTask": "WBV2-P25-003",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "done",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": false,
|
||||
"runtime": "SOURCE_BACKED_IMPLEMENTATION_WAVE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P25-003/manifest.json",
|
||||
"sha256": "20f155a3e896274bdce4a931832c87577f551320d1633366935c528fef94e93d"
|
||||
},
|
||||
"web_engine_api_cpp": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "a7f4241cb0b4bd26130ef3d4e2773736c1af49d3bf4d99d2c57477c1e73a358e"
|
||||
},
|
||||
"web_engine_ts": {
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"sha256": "ec7c7c6cbd787359bd3c6d1fb27313a48cad67d2a1dd05f0cc5bd4dfc4209bea"
|
||||
},
|
||||
"web_engine_capabilities_ts": {
|
||||
"path": "web/protocol/web-engine-capabilities.ts",
|
||||
"sha256": "ee3b18ff25378f33f16dc361837c94c9930d99c07a3886d051ebeced83b846ed"
|
||||
},
|
||||
"nonmesh_geometry_commands_ts": {
|
||||
"path": "web/protocol/nonmesh-geometry-commands.ts",
|
||||
"sha256": "bbda8b6902642b3ce948182ec5308492fc97c92292b39871ea2af908b0f96eef"
|
||||
},
|
||||
"web_engine_worker_ts": {
|
||||
"path": "web/app/src/workers/web-engine.worker.ts",
|
||||
"sha256": "bc0a1ab43b5374331267276aecac640edf3408f777571010780da09f67089af8"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P25-004/implementation-report.json",
|
||||
"sha256": "7218333b7c4315300cbc923daa56f4775939de722216b21c27f38fba5ecb06e7"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P25-004.md",
|
||||
"sha256": "c488878a3d174730076a54692d505f9602067d3f2e2aa6a4118ef495e2406587"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P25-004/implementation-task-plan.json",
|
||||
"sha256": "701aae8530a27f1096e77ec29d4b2cd7d9f9da83a85f6e82761d668e39de948c"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P25-004/task-context.json",
|
||||
"sha256": "081c9728f81ae9ca9e3c0fd4c2b7e7bef22123e22d5c29bee2e6a2978f2c0d2a"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"capabilityFamily": "GEOMETRY.NON_MESH",
|
||||
"sourceBacked": true,
|
||||
"commandCount": 21,
|
||||
"unsupportedFailsClosed": true,
|
||||
"verificationDeferred": true,
|
||||
"completionOverlayWritten": false,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-005"
|
||||
}
|
||||
168
tests/golden/WBV2-P25-004/task-context.json
Normal file
168
tests/golden/WBV2-P25-004/task-context.json
Normal file
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-004",
|
||||
"parentTask": "WBV2-P25-003",
|
||||
"status": "in_progress",
|
||||
"goal": "Wire curve, surface, font, volume, metaball and grease-pencil command families through Main and the web bridge.",
|
||||
"scope": {
|
||||
"gap": "GEOMETRY.NON_MESH",
|
||||
"ownerFamily": "GEOMETRY",
|
||||
"implementationClass": "SOURCE_BACKED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P25-004 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2940,
|
||||
"contextRemainingTokens": 734
|
||||
},
|
||||
"source": {
|
||||
"bytes": 6964,
|
||||
"tokens": 1742
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"bytes": 126797,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"bytes": 14830,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-004/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-004.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-004/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"nextTask": "WBV2-P25-005",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P25-004.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P25-003/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P25-003.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P25-004.md",
|
||||
"tests/golden/WBV2-P25-003/manifest.json",
|
||||
"docs/status/WBV2-P25-003.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-003",
|
||||
"parentTask": "WBV2-P25-002",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P25-004",
|
||||
"artifactCount": 10
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P25-003 status",
|
||||
"- task: `WBV2-P25-003`; parent: `WBV2-P25-002`; status: `done`",
|
||||
"- capability family: `MESH.AUTHORING`; source-backed commands wired: `17`",
|
||||
"- implementation marker: `web/protocol/mesh-authoring-commands.ts#meshAuthoringCommands`; no duplicate protocol shim",
|
||||
"- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written",
|
||||
"- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward",
|
||||
"- nextTask: `WBV2-P25-004`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1287,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 34,
|
||||
"taskTokens": 322
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P25-004.md",
|
||||
"bytes": 1287,
|
||||
"lines": 34,
|
||||
"tokens": 322
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-003/manifest.json",
|
||||
"bytes": 2366,
|
||||
"lines": 66,
|
||||
"tokens": 592
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-003.md",
|
||||
"bytes": 508,
|
||||
"lines": 9,
|
||||
"tokens": 127
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1742,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1742,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2766,
|
||||
"serializedContextTokens": 619,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
54
tests/golden/WBV2-P25-005/implementation-report.json
Normal file
54
tests/golden/WBV2-P25-005/implementation-report.json
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-005",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "PASS",
|
||||
"family": "ANIMATION.RENDER",
|
||||
"sourceBacked": true,
|
||||
"implementation": {
|
||||
"commandCount": 11,
|
||||
"commands": [
|
||||
"insertObjectKeyframe",
|
||||
"deleteObjectKeyframe",
|
||||
"setFCurveInterpolation",
|
||||
"setActiveAction",
|
||||
"setConstraint",
|
||||
"setNLAStack",
|
||||
"setLightProperties",
|
||||
"setCameraProperties",
|
||||
"setWorldProperties",
|
||||
"sculptStroke",
|
||||
"setSculptMeshAttributes"
|
||||
],
|
||||
"marker": {
|
||||
"path": "web/protocol/animation-render-commands.ts",
|
||||
"symbol": "animationRenderCommands"
|
||||
},
|
||||
"sourcePaths": [
|
||||
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"web/protocol/web-engine.ts",
|
||||
"web/protocol/web-engine-capabilities.ts",
|
||||
"web/protocol/animation-render-commands.ts",
|
||||
"web/app/src/app/App.tsx"
|
||||
],
|
||||
"duplicateShimAdded": false
|
||||
},
|
||||
"verification": {
|
||||
"status": "DEFERRED",
|
||||
"chromium": false,
|
||||
"malformedProductionReceipt": false,
|
||||
"undoRedo": false,
|
||||
"saveReopen": false,
|
||||
"deterministicSecondRun": false,
|
||||
"completionOverlay": false
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayChanged": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-006"
|
||||
}
|
||||
416
tests/golden/WBV2-P25-005/implementation-task-plan.json
Normal file
416
tests/golden/WBV2-P25-005/implementation-task-plan.json
Normal file
@@ -0,0 +1,416 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_IMPLEMENTATION_FIRST_WAVE_P25",
|
||||
"status": "ACTIVE_SOURCE_BACKED_IMPLEMENTATION_QUEUE",
|
||||
"authority": "user_authorized_implementation_first_execution",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"mainAuthority": "blender_main",
|
||||
"browserPolicy": "chromium_only_for_later_verification",
|
||||
"verificationPolicy": "deferred_until_implementation_wave_closes",
|
||||
"reusePolicy": "source_hash_behavior_hash_and_dedupe_key"
|
||||
},
|
||||
"inventoryPolicy": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayMutation": "forbidden_during_implementation_wave",
|
||||
"provenance": "read_only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P24-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_object_move_collection_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P23-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P24-000.md",
|
||||
"behavior": "Retained source-backed Object Move-to-Collection continuation.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-001",
|
||||
"phase": "P25",
|
||||
"title": "select_object_move_collection_batch",
|
||||
"kind": "feature",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-001.md",
|
||||
"behavior": "Retained the unique moveObjectToCollection candidate without rerun.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-002",
|
||||
"phase": "P25",
|
||||
"title": "object_move_collection_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-002.md",
|
||||
"behavior": "Retained the existing compiled WASM Main move receipt.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-003",
|
||||
"phase": "P25",
|
||||
"title": "switch_to_implementation_first_mode",
|
||||
"kind": "feature",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-003.md",
|
||||
"behavior": "Authorize implementation-first execution with verification deferred.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_source_backed_implementation_wave",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P25-000.md",
|
||||
"behavior": "Create a capability-family implementation queue from the existing source tree.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-001",
|
||||
"phase": "P25",
|
||||
"title": "implement_main_command_registry_and_dispatch",
|
||||
"kind": "feature",
|
||||
"owner": "ENGINE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-000"
|
||||
],
|
||||
"parityId": "ENGINE.COMMAND_REGISTRY",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-001.md",
|
||||
"behavior": "Create and consume one source-of-truth registry for Main-authoritative WebEngine commands.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-002",
|
||||
"phase": "P25",
|
||||
"title": "implement_core_scene_object_surface",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-002.md",
|
||||
"behavior": "Complete create, duplicate, delete, rename, transform, parent, collection and visibility paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-003",
|
||||
"phase": "P25",
|
||||
"title": "implement_mesh_authoring_surface",
|
||||
"kind": "feature",
|
||||
"owner": "MESH",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-002"
|
||||
],
|
||||
"parityId": "MESH.AUTHORING",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-003.md",
|
||||
"behavior": "Complete mesh edit, UV, material slots, vertex colors and weights paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-004",
|
||||
"phase": "P25",
|
||||
"title": "implement_nonmesh_geometry_surface",
|
||||
"kind": "feature",
|
||||
"owner": "GEOMETRY",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-003"
|
||||
],
|
||||
"parityId": "GEOMETRY.NON_MESH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-004",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-004.md",
|
||||
"behavior": "Complete curve, surface, font, volume, metaball and grease-pencil paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-005",
|
||||
"phase": "P25",
|
||||
"title": "implement_animation_constraint_render_surface",
|
||||
"kind": "feature",
|
||||
"owner": "ANIMATION",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-004"
|
||||
],
|
||||
"parityId": "ANIMATION.RENDER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-005",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-005.md",
|
||||
"behavior": "Complete keyframes, F-curves, NLA, constraints, cameras, lights, world and sculpt paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-006",
|
||||
"phase": "P25",
|
||||
"title": "implement_io_media_storage_surface",
|
||||
"kind": "feature",
|
||||
"owner": "IO",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-005"
|
||||
],
|
||||
"parityId": "IO.MEDIA_STORAGE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-006",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-006.md",
|
||||
"behavior": "Complete image, library, font, blend save/reopen and asset/resource routing paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-007",
|
||||
"phase": "P25",
|
||||
"title": "implement_frontend_workbench_surface",
|
||||
"kind": "feature",
|
||||
"owner": "FRONTEND",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-006"
|
||||
],
|
||||
"parityId": "FRONTEND.WORKBENCH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-007",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-007.md",
|
||||
"behavior": "Expose implemented command families through the worker, client and workbench UI.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-008",
|
||||
"phase": "P25",
|
||||
"title": "run_implementation_wave_smoke",
|
||||
"kind": "feature",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-007"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-008",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-008.md",
|
||||
"behavior": "Run one bounded build and browser-start smoke before opening the verification wave.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
65
tests/golden/WBV2-P25-005/manifest.json
Normal file
65
tests/golden/WBV2-P25-005/manifest.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-005",
|
||||
"parentTask": "WBV2-P25-004",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "done",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": false,
|
||||
"runtime": "SOURCE_BACKED_IMPLEMENTATION_WAVE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P25-004/manifest.json",
|
||||
"sha256": "830ec76c9bc1cfc89bdcd98db2a0d2b1d944744786ee85172dfc7542d0a62606"
|
||||
},
|
||||
"web_engine_api_cpp": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "a7f4241cb0b4bd26130ef3d4e2773736c1af49d3bf4d99d2c57477c1e73a358e"
|
||||
},
|
||||
"web_engine_ts": {
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"sha256": "ec7c7c6cbd787359bd3c6d1fb27313a48cad67d2a1dd05f0cc5bd4dfc4209bea"
|
||||
},
|
||||
"web_engine_capabilities_ts": {
|
||||
"path": "web/protocol/web-engine-capabilities.ts",
|
||||
"sha256": "ee3b18ff25378f33f16dc361837c94c9930d99c07a3886d051ebeced83b846ed"
|
||||
},
|
||||
"animation_render_commands_ts": {
|
||||
"path": "web/protocol/animation-render-commands.ts",
|
||||
"sha256": "1b5ec00b3495aa1c04ac2a1c7cdfe41a81b8c728ec572733823e1d863ba6d1ca"
|
||||
},
|
||||
"App_tsx": {
|
||||
"path": "web/app/src/app/App.tsx",
|
||||
"sha256": "b1bc098274224a4ba1a180c22293c61f79a432bd1df073b5b810c820ad1b5d9f"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P25-005/implementation-report.json",
|
||||
"sha256": "2835a9f0c0e7415ea219fa8c3256d2cfbe8628a7937776961034e73b44df2539"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P25-005.md",
|
||||
"sha256": "19b0c1d5507a64366c7b53fd5aab391246eaea753dbe004308cde17fbe64baaa"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P25-005/implementation-task-plan.json",
|
||||
"sha256": "85b0acf60778c67b40c0188f6845fc1e02c52b1125bdf3d33d5252b11fe4644b"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P25-005/task-context.json",
|
||||
"sha256": "a541a3225d5e8803dd4bd4b304896683523d3bfa66908cf8305b9fbb0beaa417"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"capabilityFamily": "ANIMATION.RENDER",
|
||||
"sourceBacked": true,
|
||||
"commandCount": 11,
|
||||
"unsupportedFailsClosed": true,
|
||||
"verificationDeferred": true,
|
||||
"completionOverlayWritten": false,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-006"
|
||||
}
|
||||
168
tests/golden/WBV2-P25-005/task-context.json
Normal file
168
tests/golden/WBV2-P25-005/task-context.json
Normal file
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-005",
|
||||
"parentTask": "WBV2-P25-004",
|
||||
"status": "in_progress",
|
||||
"goal": "Wire animation, constraints, NLA, camera, light, world and sculpt command families.",
|
||||
"scope": {
|
||||
"gap": "ANIMATION.RENDER",
|
||||
"ownerFamily": "ANIMATION",
|
||||
"implementationClass": "SOURCE_BACKED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P25-005 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2913,
|
||||
"contextRemainingTokens": 727
|
||||
},
|
||||
"source": {
|
||||
"bytes": 6991,
|
||||
"tokens": 1749
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"bytes": 126797,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"bytes": 14830,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-005/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-005.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-005/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"nextTask": "WBV2-P25-006",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P25-005.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P25-004/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P25-004.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P25-005.md",
|
||||
"tests/golden/WBV2-P25-004/manifest.json",
|
||||
"docs/status/WBV2-P25-004.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-004",
|
||||
"parentTask": "WBV2-P25-003",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P25-005",
|
||||
"artifactCount": 10
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P25-004 status",
|
||||
"- task: `WBV2-P25-004`; parent: `WBV2-P25-003`; status: `done`",
|
||||
"- capability family: `GEOMETRY.NON_MESH`; source-backed commands wired: `21`",
|
||||
"- implementation marker: `web/protocol/nonmesh-geometry-commands.ts#nonMeshGeometryCommands`; no duplicate protocol shim",
|
||||
"- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written",
|
||||
"- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward",
|
||||
"- nextTask: `WBV2-P25-005`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1270,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 34,
|
||||
"taskTokens": 318
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P25-005.md",
|
||||
"bytes": 1270,
|
||||
"lines": 34,
|
||||
"tokens": 318
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-004/manifest.json",
|
||||
"bytes": 2403,
|
||||
"lines": 66,
|
||||
"tokens": 601
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-004.md",
|
||||
"bytes": 515,
|
||||
"lines": 9,
|
||||
"tokens": 129
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1749,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1749,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2773,
|
||||
"serializedContextTokens": 612,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
46
tests/golden/WBV2-P25-006/implementation-report.json
Normal file
46
tests/golden/WBV2-P25-006/implementation-report.json
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-006",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "PASS",
|
||||
"family": "IO.MEDIA_STORAGE",
|
||||
"sourceBacked": true,
|
||||
"implementation": {
|
||||
"commandCount": 2,
|
||||
"commands": [
|
||||
"importImage",
|
||||
"importVFont"
|
||||
],
|
||||
"marker": {
|
||||
"path": "web/protocol/io-media-commands.ts",
|
||||
"symbol": "ioMediaCommands"
|
||||
},
|
||||
"sourcePaths": [
|
||||
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"web/protocol/web-engine.ts",
|
||||
"web/protocol/web-engine-capabilities.ts",
|
||||
"web/protocol/io-media-commands.ts",
|
||||
"web/app/src/workers/web-engine.worker.ts",
|
||||
"web/app/src/storage/StorageClient.ts"
|
||||
],
|
||||
"duplicateShimAdded": false
|
||||
},
|
||||
"verification": {
|
||||
"status": "DEFERRED",
|
||||
"chromium": false,
|
||||
"malformedProductionReceipt": false,
|
||||
"undoRedo": false,
|
||||
"saveReopen": false,
|
||||
"deterministicSecondRun": false,
|
||||
"completionOverlay": false
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayChanged": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-007"
|
||||
}
|
||||
416
tests/golden/WBV2-P25-006/implementation-task-plan.json
Normal file
416
tests/golden/WBV2-P25-006/implementation-task-plan.json
Normal file
@@ -0,0 +1,416 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_IMPLEMENTATION_FIRST_WAVE_P25",
|
||||
"status": "ACTIVE_SOURCE_BACKED_IMPLEMENTATION_QUEUE",
|
||||
"authority": "user_authorized_implementation_first_execution",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"mainAuthority": "blender_main",
|
||||
"browserPolicy": "chromium_only_for_later_verification",
|
||||
"verificationPolicy": "deferred_until_implementation_wave_closes",
|
||||
"reusePolicy": "source_hash_behavior_hash_and_dedupe_key"
|
||||
},
|
||||
"inventoryPolicy": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayMutation": "forbidden_during_implementation_wave",
|
||||
"provenance": "read_only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P24-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_object_move_collection_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P23-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P24-000.md",
|
||||
"behavior": "Retained source-backed Object Move-to-Collection continuation.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-001",
|
||||
"phase": "P25",
|
||||
"title": "select_object_move_collection_batch",
|
||||
"kind": "feature",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-001.md",
|
||||
"behavior": "Retained the unique moveObjectToCollection candidate without rerun.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-002",
|
||||
"phase": "P25",
|
||||
"title": "object_move_collection_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-002.md",
|
||||
"behavior": "Retained the existing compiled WASM Main move receipt.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-003",
|
||||
"phase": "P25",
|
||||
"title": "switch_to_implementation_first_mode",
|
||||
"kind": "feature",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-003.md",
|
||||
"behavior": "Authorize implementation-first execution with verification deferred.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_source_backed_implementation_wave",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P25-000.md",
|
||||
"behavior": "Create a capability-family implementation queue from the existing source tree.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-001",
|
||||
"phase": "P25",
|
||||
"title": "implement_main_command_registry_and_dispatch",
|
||||
"kind": "feature",
|
||||
"owner": "ENGINE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-000"
|
||||
],
|
||||
"parityId": "ENGINE.COMMAND_REGISTRY",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-001.md",
|
||||
"behavior": "Create and consume one source-of-truth registry for Main-authoritative WebEngine commands.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-002",
|
||||
"phase": "P25",
|
||||
"title": "implement_core_scene_object_surface",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-002.md",
|
||||
"behavior": "Complete create, duplicate, delete, rename, transform, parent, collection and visibility paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-003",
|
||||
"phase": "P25",
|
||||
"title": "implement_mesh_authoring_surface",
|
||||
"kind": "feature",
|
||||
"owner": "MESH",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-002"
|
||||
],
|
||||
"parityId": "MESH.AUTHORING",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-003.md",
|
||||
"behavior": "Complete mesh edit, UV, material slots, vertex colors and weights paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-004",
|
||||
"phase": "P25",
|
||||
"title": "implement_nonmesh_geometry_surface",
|
||||
"kind": "feature",
|
||||
"owner": "GEOMETRY",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-003"
|
||||
],
|
||||
"parityId": "GEOMETRY.NON_MESH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-004",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-004.md",
|
||||
"behavior": "Complete curve, surface, font, volume, metaball and grease-pencil paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-005",
|
||||
"phase": "P25",
|
||||
"title": "implement_animation_constraint_render_surface",
|
||||
"kind": "feature",
|
||||
"owner": "ANIMATION",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-004"
|
||||
],
|
||||
"parityId": "ANIMATION.RENDER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-005",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-005.md",
|
||||
"behavior": "Complete keyframes, F-curves, NLA, constraints, cameras, lights, world and sculpt paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-006",
|
||||
"phase": "P25",
|
||||
"title": "implement_io_media_storage_surface",
|
||||
"kind": "feature",
|
||||
"owner": "IO",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-005"
|
||||
],
|
||||
"parityId": "IO.MEDIA_STORAGE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-006",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-006.md",
|
||||
"behavior": "Complete image, library, font, blend save/reopen and asset/resource routing paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-007",
|
||||
"phase": "P25",
|
||||
"title": "implement_frontend_workbench_surface",
|
||||
"kind": "feature",
|
||||
"owner": "FRONTEND",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-006"
|
||||
],
|
||||
"parityId": "FRONTEND.WORKBENCH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-007",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-007.md",
|
||||
"behavior": "Expose implemented command families through the worker, client and workbench UI.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-008",
|
||||
"phase": "P25",
|
||||
"title": "run_implementation_wave_smoke",
|
||||
"kind": "feature",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-007"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-008",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-008.md",
|
||||
"behavior": "Run one bounded build and browser-start smoke before opening the verification wave.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
69
tests/golden/WBV2-P25-006/manifest.json
Normal file
69
tests/golden/WBV2-P25-006/manifest.json
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-006",
|
||||
"parentTask": "WBV2-P25-005",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "done",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": false,
|
||||
"runtime": "SOURCE_BACKED_IMPLEMENTATION_WAVE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P25-005/manifest.json",
|
||||
"sha256": "58ecc1177615a6fc733cf9b8944cef9e0e83ce75a7b3ff5e9df17a40c8daae76"
|
||||
},
|
||||
"web_engine_api_cpp": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "a7f4241cb0b4bd26130ef3d4e2773736c1af49d3bf4d99d2c57477c1e73a358e"
|
||||
},
|
||||
"web_engine_ts": {
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"sha256": "ec7c7c6cbd787359bd3c6d1fb27313a48cad67d2a1dd05f0cc5bd4dfc4209bea"
|
||||
},
|
||||
"web_engine_capabilities_ts": {
|
||||
"path": "web/protocol/web-engine-capabilities.ts",
|
||||
"sha256": "ee3b18ff25378f33f16dc361837c94c9930d99c07a3886d051ebeced83b846ed"
|
||||
},
|
||||
"io_media_commands_ts": {
|
||||
"path": "web/protocol/io-media-commands.ts",
|
||||
"sha256": "da7bd4aaa0c6040379082ba8a179ae654b53fccd9c5881ebd21012b9ab39aacc"
|
||||
},
|
||||
"web_engine_worker_ts": {
|
||||
"path": "web/app/src/workers/web-engine.worker.ts",
|
||||
"sha256": "bc0a1ab43b5374331267276aecac640edf3408f777571010780da09f67089af8"
|
||||
},
|
||||
"StorageClient_ts": {
|
||||
"path": "web/app/src/storage/StorageClient.ts",
|
||||
"sha256": "00cd35e4632479e4cd153314113e201c822fd209ae6c8e9fbeff5f1399728565"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P25-006/implementation-report.json",
|
||||
"sha256": "1f70b4abf21aa0e156496ec2bedd33aaeb7e55b772bafef90d51a9f2cb5eb791"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P25-006.md",
|
||||
"sha256": "1e2fbee21684c0e27bdd73a93131d0c407acdd12fb4e785aa308f4be452b0c6d"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P25-006/implementation-task-plan.json",
|
||||
"sha256": "edcc44d4c7a0ecd6b0418d30fb9118930e9f3a5f5d86d60c14c64131b25a762a"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P25-006/task-context.json",
|
||||
"sha256": "64ccd0b6bdf5391a4a4c171207c5a7c439eaafe187ff04cc72382d91d07ac9f5"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"capabilityFamily": "IO.MEDIA_STORAGE",
|
||||
"sourceBacked": true,
|
||||
"commandCount": 2,
|
||||
"unsupportedFailsClosed": true,
|
||||
"verificationDeferred": true,
|
||||
"completionOverlayWritten": false,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-007"
|
||||
}
|
||||
168
tests/golden/WBV2-P25-006/task-context.json
Normal file
168
tests/golden/WBV2-P25-006/task-context.json
Normal file
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-006",
|
||||
"parentTask": "WBV2-P25-005",
|
||||
"status": "in_progress",
|
||||
"goal": "Wire image, library, font, blend persistence and resource routing paths using existing source implementations.",
|
||||
"scope": {
|
||||
"gap": "IO.MEDIA_STORAGE",
|
||||
"ownerFamily": "IO",
|
||||
"implementationClass": "SOURCE_BACKED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P25-006 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2936,
|
||||
"contextRemainingTokens": 733
|
||||
},
|
||||
"source": {
|
||||
"bytes": 6968,
|
||||
"tokens": 1743
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"bytes": 126797,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"bytes": 14830,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-006/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-006.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-006/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"nextTask": "WBV2-P25-007",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P25-006.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P25-005/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P25-005.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P25-006.md",
|
||||
"tests/golden/WBV2-P25-005/manifest.json",
|
||||
"docs/status/WBV2-P25-005.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-005",
|
||||
"parentTask": "WBV2-P25-004",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P25-006",
|
||||
"artifactCount": 10
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P25-005 status",
|
||||
"- task: `WBV2-P25-005`; parent: `WBV2-P25-004`; status: `done`",
|
||||
"- capability family: `ANIMATION.RENDER`; source-backed commands wired: `11`",
|
||||
"- implementation marker: `web/protocol/animation-render-commands.ts#animationRenderCommands`; no duplicate protocol shim",
|
||||
"- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written",
|
||||
"- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward",
|
||||
"- nextTask: `WBV2-P25-006`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1279,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 34,
|
||||
"taskTokens": 320
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P25-006.md",
|
||||
"bytes": 1279,
|
||||
"lines": 34,
|
||||
"tokens": 320
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-005/manifest.json",
|
||||
"bytes": 2372,
|
||||
"lines": 66,
|
||||
"tokens": 593
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-005.md",
|
||||
"bytes": 514,
|
||||
"lines": 9,
|
||||
"tokens": 129
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1743,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1743,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2767,
|
||||
"serializedContextTokens": 617,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
52
tests/golden/WBV2-P25-007/implementation-report.json
Normal file
52
tests/golden/WBV2-P25-007/implementation-report.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-007",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "PASS",
|
||||
"family": "FRONTEND.WORKBENCH",
|
||||
"sourceBacked": true,
|
||||
"implementation": {
|
||||
"commandCount": 9,
|
||||
"commands": [
|
||||
"createPrimitive",
|
||||
"duplicateObject",
|
||||
"deleteObject",
|
||||
"setObjectTransform",
|
||||
"meshEdit",
|
||||
"createCurve",
|
||||
"setGreasePencilStrokes",
|
||||
"setLightProperties",
|
||||
"setCameraProperties"
|
||||
],
|
||||
"marker": {
|
||||
"path": "web/protocol/workbench-command-groups.ts",
|
||||
"symbol": "WORKBENCH_COMMAND_GROUPS"
|
||||
},
|
||||
"sourcePaths": [
|
||||
"web/protocol/web-engine.ts",
|
||||
"web/protocol/web-engine-capabilities.ts",
|
||||
"web/protocol/workbench-command-groups.ts",
|
||||
"web/app/src/app/App.tsx",
|
||||
"web/app/src/workers/web-engine.worker.ts"
|
||||
],
|
||||
"duplicateShimAdded": false
|
||||
},
|
||||
"verification": {
|
||||
"status": "DEFERRED",
|
||||
"chromium": false,
|
||||
"malformedProductionReceipt": false,
|
||||
"undoRedo": false,
|
||||
"saveReopen": false,
|
||||
"deterministicSecondRun": false,
|
||||
"completionOverlay": false
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayChanged": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-008"
|
||||
}
|
||||
416
tests/golden/WBV2-P25-007/implementation-task-plan.json
Normal file
416
tests/golden/WBV2-P25-007/implementation-task-plan.json
Normal file
@@ -0,0 +1,416 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_IMPLEMENTATION_FIRST_WAVE_P25",
|
||||
"status": "ACTIVE_SOURCE_BACKED_IMPLEMENTATION_QUEUE",
|
||||
"authority": "user_authorized_implementation_first_execution",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"mainAuthority": "blender_main",
|
||||
"browserPolicy": "chromium_only_for_later_verification",
|
||||
"verificationPolicy": "deferred_until_implementation_wave_closes",
|
||||
"reusePolicy": "source_hash_behavior_hash_and_dedupe_key"
|
||||
},
|
||||
"inventoryPolicy": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayMutation": "forbidden_during_implementation_wave",
|
||||
"provenance": "read_only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P24-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_object_move_collection_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P23-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P24-000.md",
|
||||
"behavior": "Retained source-backed Object Move-to-Collection continuation.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-001",
|
||||
"phase": "P25",
|
||||
"title": "select_object_move_collection_batch",
|
||||
"kind": "feature",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-001.md",
|
||||
"behavior": "Retained the unique moveObjectToCollection candidate without rerun.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-002",
|
||||
"phase": "P25",
|
||||
"title": "object_move_collection_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-002.md",
|
||||
"behavior": "Retained the existing compiled WASM Main move receipt.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-003",
|
||||
"phase": "P25",
|
||||
"title": "switch_to_implementation_first_mode",
|
||||
"kind": "feature",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-003.md",
|
||||
"behavior": "Authorize implementation-first execution with verification deferred.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_source_backed_implementation_wave",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P25-000.md",
|
||||
"behavior": "Create a capability-family implementation queue from the existing source tree.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-001",
|
||||
"phase": "P25",
|
||||
"title": "implement_main_command_registry_and_dispatch",
|
||||
"kind": "feature",
|
||||
"owner": "ENGINE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-000"
|
||||
],
|
||||
"parityId": "ENGINE.COMMAND_REGISTRY",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-001.md",
|
||||
"behavior": "Create and consume one source-of-truth registry for Main-authoritative WebEngine commands.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-002",
|
||||
"phase": "P25",
|
||||
"title": "implement_core_scene_object_surface",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-002.md",
|
||||
"behavior": "Complete create, duplicate, delete, rename, transform, parent, collection and visibility paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-003",
|
||||
"phase": "P25",
|
||||
"title": "implement_mesh_authoring_surface",
|
||||
"kind": "feature",
|
||||
"owner": "MESH",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-002"
|
||||
],
|
||||
"parityId": "MESH.AUTHORING",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-003.md",
|
||||
"behavior": "Complete mesh edit, UV, material slots, vertex colors and weights paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-004",
|
||||
"phase": "P25",
|
||||
"title": "implement_nonmesh_geometry_surface",
|
||||
"kind": "feature",
|
||||
"owner": "GEOMETRY",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-003"
|
||||
],
|
||||
"parityId": "GEOMETRY.NON_MESH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-004",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-004.md",
|
||||
"behavior": "Complete curve, surface, font, volume, metaball and grease-pencil paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-005",
|
||||
"phase": "P25",
|
||||
"title": "implement_animation_constraint_render_surface",
|
||||
"kind": "feature",
|
||||
"owner": "ANIMATION",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-004"
|
||||
],
|
||||
"parityId": "ANIMATION.RENDER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-005",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-005.md",
|
||||
"behavior": "Complete keyframes, F-curves, NLA, constraints, cameras, lights, world and sculpt paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-006",
|
||||
"phase": "P25",
|
||||
"title": "implement_io_media_storage_surface",
|
||||
"kind": "feature",
|
||||
"owner": "IO",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-005"
|
||||
],
|
||||
"parityId": "IO.MEDIA_STORAGE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-006",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-006.md",
|
||||
"behavior": "Complete image, library, font, blend save/reopen and asset/resource routing paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-007",
|
||||
"phase": "P25",
|
||||
"title": "implement_frontend_workbench_surface",
|
||||
"kind": "feature",
|
||||
"owner": "FRONTEND",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-006"
|
||||
],
|
||||
"parityId": "FRONTEND.WORKBENCH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-007",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-007.md",
|
||||
"behavior": "Expose implemented command families through the worker, client and workbench UI.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-008",
|
||||
"phase": "P25",
|
||||
"title": "run_implementation_wave_smoke",
|
||||
"kind": "feature",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-007"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-008",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-008.md",
|
||||
"behavior": "Run one bounded build and browser-start smoke before opening the verification wave.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
65
tests/golden/WBV2-P25-007/manifest.json
Normal file
65
tests/golden/WBV2-P25-007/manifest.json
Normal file
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-007",
|
||||
"parentTask": "WBV2-P25-006",
|
||||
"operation": "IMPLEMENT_CAPABILITY_FAMILY",
|
||||
"status": "done",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": false,
|
||||
"runtime": "SOURCE_BACKED_IMPLEMENTATION_WAVE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P25-006/manifest.json",
|
||||
"sha256": "dd6087a39bd119e5fd1118d8dc7192cd13167e3ce0c95f31823db7ab790dfd79"
|
||||
},
|
||||
"web_engine_ts": {
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"sha256": "ec7c7c6cbd787359bd3c6d1fb27313a48cad67d2a1dd05f0cc5bd4dfc4209bea"
|
||||
},
|
||||
"web_engine_capabilities_ts": {
|
||||
"path": "web/protocol/web-engine-capabilities.ts",
|
||||
"sha256": "ee3b18ff25378f33f16dc361837c94c9930d99c07a3886d051ebeced83b846ed"
|
||||
},
|
||||
"workbench_command_groups_ts": {
|
||||
"path": "web/protocol/workbench-command-groups.ts",
|
||||
"sha256": "aeef39c43595b58969621d1e9fe5b52090fc022ad7a6ae8c06caed23cc34c244"
|
||||
},
|
||||
"App_tsx": {
|
||||
"path": "web/app/src/app/App.tsx",
|
||||
"sha256": "b1bc098274224a4ba1a180c22293c61f79a432bd1df073b5b810c820ad1b5d9f"
|
||||
},
|
||||
"web_engine_worker_ts": {
|
||||
"path": "web/app/src/workers/web-engine.worker.ts",
|
||||
"sha256": "bc0a1ab43b5374331267276aecac640edf3408f777571010780da09f67089af8"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P25-007/implementation-report.json",
|
||||
"sha256": "6bd741d4e33f113c79890c86ea63a5c68bf8601bfea247c57a3e74fbb41ec53b"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P25-007.md",
|
||||
"sha256": "5f35b1e53ca07cc83ec9d14b682b84338e065097524c5d7719ddb28b42d5eefb"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P25-007/implementation-task-plan.json",
|
||||
"sha256": "402b9d9f6ad88b95a4b84a6ee6de4b9082e331387b02d5fe82f6e1127eac678f"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P25-007/task-context.json",
|
||||
"sha256": "11cd1738e1f6f3d8b79b8a053f0fb38b9277c845f189f6eee2b126e46eff8e99"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"capabilityFamily": "FRONTEND.WORKBENCH",
|
||||
"sourceBacked": true,
|
||||
"commandCount": 9,
|
||||
"unsupportedFailsClosed": true,
|
||||
"verificationDeferred": true,
|
||||
"completionOverlayWritten": false,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P25-008"
|
||||
}
|
||||
168
tests/golden/WBV2-P25-007/task-context.json
Normal file
168
tests/golden/WBV2-P25-007/task-context.json
Normal file
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-007",
|
||||
"parentTask": "WBV2-P25-006",
|
||||
"status": "in_progress",
|
||||
"goal": "Expose implemented command families through worker/client state and the workbench controls without duplicating protocol logic.",
|
||||
"scope": {
|
||||
"gap": "FRONTEND.WORKBENCH",
|
||||
"ownerFamily": "FRONTEND",
|
||||
"implementationClass": "SOURCE_BACKED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P25-007 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2791,
|
||||
"contextRemainingTokens": 696
|
||||
},
|
||||
"source": {
|
||||
"bytes": 7113,
|
||||
"tokens": 1780
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "web/app/src",
|
||||
"bytes": 8344,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/protocol/web-engine.ts",
|
||||
"bytes": 14830,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-007/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-007.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-007/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"nextTask": "WBV2-P25-008",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P25-007.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P25-006/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P25-006.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P25-007.md",
|
||||
"tests/golden/WBV2-P25-006/manifest.json",
|
||||
"docs/status/WBV2-P25-006.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-006",
|
||||
"parentTask": "WBV2-P25-005",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P25-007",
|
||||
"artifactCount": 11
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P25-006 status",
|
||||
"- task: `WBV2-P25-006`; parent: `WBV2-P25-005`; status: `done`",
|
||||
"- capability family: `IO.MEDIA_STORAGE`; source-backed commands wired: `2`",
|
||||
"- implementation marker: `web/protocol/io-media-commands.ts#ioMediaCommands`; no duplicate protocol shim",
|
||||
"- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written",
|
||||
"- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward",
|
||||
"- nextTask: `WBV2-P25-007`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1258,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 34,
|
||||
"taskTokens": 315
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P25-007.md",
|
||||
"bytes": 1258,
|
||||
"lines": 34,
|
||||
"tokens": 315
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-006/manifest.json",
|
||||
"bytes": 2555,
|
||||
"lines": 70,
|
||||
"tokens": 639
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-006.md",
|
||||
"bytes": 497,
|
||||
"lines": 9,
|
||||
"tokens": 125
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1780,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1780,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2804,
|
||||
"serializedContextTokens": 623,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
45
tests/golden/WBV2-P25-008/implementation-smoke-report.json
Normal file
45
tests/golden/WBV2-P25-008/implementation-smoke-report.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-008",
|
||||
"operation": "RUN_IMPLEMENTATION_WAVE_SMOKE",
|
||||
"status": "PASS",
|
||||
"build": {
|
||||
"command": "npm --prefix web run build",
|
||||
"exitCode": 0,
|
||||
"index": "web/dist/index.html",
|
||||
"worker": "web/dist/assets/web-engine.worker-D48N3wX6.js",
|
||||
"wasm": "web/dist/assets/web_engine-tuhS8OZi.wasm"
|
||||
},
|
||||
"browserStart": {
|
||||
"command": "npm --prefix web run dev -- --host 127.0.0.1",
|
||||
"url": "http://127.0.0.1:5173/",
|
||||
"httpStatus": 200,
|
||||
"chromiumProductionVerification": "DEFERRED"
|
||||
},
|
||||
"implementation": {
|
||||
"p25Families": [
|
||||
"ENGINE.COMMAND_REGISTRY",
|
||||
"OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"MESH.AUTHORING",
|
||||
"GEOMETRY.NON_MESH",
|
||||
"ANIMATION.RENDER",
|
||||
"IO.MEDIA_STORAGE",
|
||||
"FRONTEND.WORKBENCH"
|
||||
],
|
||||
"sourceBacked": true
|
||||
},
|
||||
"verification": {
|
||||
"status": "DEFERRED",
|
||||
"chromium": false,
|
||||
"completionOverlay": false,
|
||||
"fullHistoricalReproduction": false
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609
|
||||
},
|
||||
"nextTask": "WBV2-P26-000"
|
||||
}
|
||||
416
tests/golden/WBV2-P25-008/implementation-task-plan.json
Normal file
416
tests/golden/WBV2-P25-008/implementation-task-plan.json
Normal file
@@ -0,0 +1,416 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_IMPLEMENTATION_FIRST_WAVE_P25",
|
||||
"status": "ACTIVE_SOURCE_BACKED_IMPLEMENTATION_QUEUE",
|
||||
"authority": "user_authorized_implementation_first_execution",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"mainAuthority": "blender_main",
|
||||
"browserPolicy": "chromium_only_for_later_verification",
|
||||
"verificationPolicy": "deferred_until_implementation_wave_closes",
|
||||
"reusePolicy": "source_hash_behavior_hash_and_dedupe_key"
|
||||
},
|
||||
"inventoryPolicy": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayMutation": "forbidden_during_implementation_wave",
|
||||
"provenance": "read_only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P24-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_object_move_collection_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P23-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P24-000.md",
|
||||
"behavior": "Retained source-backed Object Move-to-Collection continuation.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-001",
|
||||
"phase": "P25",
|
||||
"title": "select_object_move_collection_batch",
|
||||
"kind": "feature",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-001.md",
|
||||
"behavior": "Retained the unique moveObjectToCollection candidate without rerun.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-002",
|
||||
"phase": "P25",
|
||||
"title": "object_move_collection_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.MOVE_COLLECTION",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-002.md",
|
||||
"behavior": "Retained the existing compiled WASM Main move receipt.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P24-003",
|
||||
"phase": "P25",
|
||||
"title": "switch_to_implementation_first_mode",
|
||||
"kind": "feature",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P24-003.md",
|
||||
"behavior": "Authorize implementation-first execution with verification deferred.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-000",
|
||||
"phase": "P25",
|
||||
"title": "authorize_source_backed_implementation_wave",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P24-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P25-000.md",
|
||||
"behavior": "Create a capability-family implementation queue from the existing source tree.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-001",
|
||||
"phase": "P25",
|
||||
"title": "implement_main_command_registry_and_dispatch",
|
||||
"kind": "feature",
|
||||
"owner": "ENGINE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-000"
|
||||
],
|
||||
"parityId": "ENGINE.COMMAND_REGISTRY",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-001.md",
|
||||
"behavior": "Create and consume one source-of-truth registry for Main-authoritative WebEngine commands.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-002",
|
||||
"phase": "P25",
|
||||
"title": "implement_core_scene_object_surface",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.CORE_SCENE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-002.md",
|
||||
"behavior": "Complete create, duplicate, delete, rename, transform, parent, collection and visibility paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-003",
|
||||
"phase": "P25",
|
||||
"title": "implement_mesh_authoring_surface",
|
||||
"kind": "feature",
|
||||
"owner": "MESH",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-002"
|
||||
],
|
||||
"parityId": "MESH.AUTHORING",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-003.md",
|
||||
"behavior": "Complete mesh edit, UV, material slots, vertex colors and weights paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-004",
|
||||
"phase": "P25",
|
||||
"title": "implement_nonmesh_geometry_surface",
|
||||
"kind": "feature",
|
||||
"owner": "GEOMETRY",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-003"
|
||||
],
|
||||
"parityId": "GEOMETRY.NON_MESH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-004",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-004.md",
|
||||
"behavior": "Complete curve, surface, font, volume, metaball and grease-pencil paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-005",
|
||||
"phase": "P25",
|
||||
"title": "implement_animation_constraint_render_surface",
|
||||
"kind": "feature",
|
||||
"owner": "ANIMATION",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-004"
|
||||
],
|
||||
"parityId": "ANIMATION.RENDER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-005",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-005.md",
|
||||
"behavior": "Complete keyframes, F-curves, NLA, constraints, cameras, lights, world and sculpt paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-006",
|
||||
"phase": "P25",
|
||||
"title": "implement_io_media_storage_surface",
|
||||
"kind": "feature",
|
||||
"owner": "IO",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-005"
|
||||
],
|
||||
"parityId": "IO.MEDIA_STORAGE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-006",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-006.md",
|
||||
"behavior": "Complete image, library, font, blend save/reopen and asset/resource routing paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-007",
|
||||
"phase": "P25",
|
||||
"title": "implement_frontend_workbench_surface",
|
||||
"kind": "feature",
|
||||
"owner": "FRONTEND",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-006"
|
||||
],
|
||||
"parityId": "FRONTEND.WORKBENCH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-007",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-007.md",
|
||||
"behavior": "Expose implemented command families through the worker, client and workbench UI.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P25-008",
|
||||
"phase": "P25",
|
||||
"title": "run_implementation_wave_smoke",
|
||||
"kind": "feature",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-007"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p25-008",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P25-008.md",
|
||||
"behavior": "Run one bounded build and browser-start smoke before opening the verification wave.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred until the verification wave"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
52
tests/golden/WBV2-P25-008/manifest.json
Normal file
52
tests/golden/WBV2-P25-008/manifest.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-008",
|
||||
"parentTask": "WBV2-P25-007",
|
||||
"operation": "RUN_IMPLEMENTATION_WAVE_SMOKE",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "VITE_BUILD_AND_BROWSER_START_SMOKE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P25-007/manifest.json",
|
||||
"sha256": "9a39c1228c6dd9b50f3f73c73d0048bc2970f205d0ca31212d70ca98e0707162"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P25-008/implementation-smoke-report.json",
|
||||
"sha256": "68a32525e8f3d8d2893f8f28c4fb02757091e47ff6b42c607be179bbd170d6aa"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P25-008.md",
|
||||
"sha256": "72fbbbf162695bbf078eddc76415fe1acc30e1464569137263ea7f64beb693c5"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P25-008/implementation-task-plan.json",
|
||||
"sha256": "19f07f2dab2537ade67d496c4fea3bc1246f94c28646c70670c27a3d920cf890"
|
||||
},
|
||||
"index": {
|
||||
"path": "web/dist/index.html",
|
||||
"sha256": "65d51defc76f4abf0360cf52871c48c4e8ece6509512cb53438c2581c2d3bf83"
|
||||
},
|
||||
"worker": {
|
||||
"path": "web/dist/assets/web-engine.worker-D48N3wX6.js",
|
||||
"sha256": "97acbd8697194abf9fc30743331f26b63270b07b7d9e45e1b74d20631aac2671"
|
||||
},
|
||||
"wasm": {
|
||||
"path": "web/dist/assets/web_engine-tuhS8OZi.wasm",
|
||||
"sha256": "25bc1e286fd3b72c2c7c082b85a29b2d0bb109588a6dc0de5be94fcdc37cc88c"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"buildExitCode": 0,
|
||||
"browserStartHttpStatus": 200,
|
||||
"sourceBackedImplementation": true,
|
||||
"verificationDeferred": true,
|
||||
"completionOverlayWritten": false,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P26-000"
|
||||
}
|
||||
167
tests/golden/WBV2-P25-008/task-context.json
Normal file
167
tests/golden/WBV2-P25-008/task-context.json
Normal file
@@ -0,0 +1,167 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-008",
|
||||
"parentTask": "WBV2-P25-007",
|
||||
"status": "in_progress",
|
||||
"goal": "Run only bounded build and browser-start smoke; leave full production verification for the next wave.",
|
||||
"scope": {
|
||||
"gap": "workflow:run_implementation_wave_smoke",
|
||||
"ownerFamily": "RELEASE",
|
||||
"implementationClass": "SOURCE_BACKED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P25-008 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 3007,
|
||||
"contextRemainingTokens": 751
|
||||
},
|
||||
"source": {
|
||||
"bytes": 6897,
|
||||
"tokens": 1725
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "web/package.json",
|
||||
"bytes": 36191,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/app/package.json",
|
||||
"bytes": null,
|
||||
"reason": "MISSING_PATH"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-008/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-008.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-008/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"focused command exits 0",
|
||||
"report and manifest are hash-bound",
|
||||
"failure path does not publish a late result"
|
||||
],
|
||||
"nextTask": "WBV2-P26-000",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P25-008.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P25-007/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P25-007.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P25-008.md",
|
||||
"tests/golden/WBV2-P25-007/manifest.json",
|
||||
"docs/status/WBV2-P25-007.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P25-007",
|
||||
"parentTask": "WBV2-P25-006",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P25-008",
|
||||
"artifactCount": 10
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P25-007 status",
|
||||
"- task: `WBV2-P25-007`; parent: `WBV2-P25-006`; status: `done`",
|
||||
"- capability family: `FRONTEND.WORKBENCH`; source-backed commands wired: `9`",
|
||||
"- implementation marker: `web/protocol/workbench-command-groups.ts#WORKBENCH_COMMAND_GROUPS`; no duplicate protocol shim",
|
||||
"- verification wave: `DEFERRED`; no Chromium receipt or completion overlay written",
|
||||
"- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward",
|
||||
"- nextTask: `WBV2-P25-008`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1224,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 34,
|
||||
"taskTokens": 306
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P25-008.md",
|
||||
"bytes": 1224,
|
||||
"lines": 34,
|
||||
"tokens": 306
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P25-007/manifest.json",
|
||||
"bytes": 2355,
|
||||
"lines": 66,
|
||||
"tokens": 589
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P25-007.md",
|
||||
"bytes": 515,
|
||||
"lines": 9,
|
||||
"tokens": 129
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1725,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1725,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2749,
|
||||
"serializedContextTokens": 609,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P26-000",
|
||||
"operation": "AUTHORIZE_ADVANCED_CAPABILITY_IMPLEMENTATION",
|
||||
"status": "PASS",
|
||||
"parent": {
|
||||
"task": "WBV2-P25-008",
|
||||
"manifest": "tests/golden/WBV2-P25-008/manifest.json",
|
||||
"manifestSha256": "470937c0dd4cb87acf6382b68a606cc514d57fb48f5511022657184e974a668e"
|
||||
},
|
||||
"scope": {
|
||||
"firstTask": "WBV2-P26-001",
|
||||
"plannedTasks": [
|
||||
"WBV2-P26-000",
|
||||
"WBV2-P26-001",
|
||||
"WBV2-P26-002",
|
||||
"WBV2-P26-003",
|
||||
"WBV2-P26-004",
|
||||
"WBV2-P26-005",
|
||||
"WBV2-P26-006"
|
||||
],
|
||||
"capabilityFamilies": [
|
||||
"GEOMETRY_NODES.MAIN_WRITER",
|
||||
"SHADER.GRAPH_WORKBENCH",
|
||||
"SIMULATION.PHYSICS_PARTICLE",
|
||||
"RENDER.COMPOSITOR_SEQUENCER",
|
||||
"IO.ASSET_LIBRARY_STORAGE"
|
||||
]
|
||||
},
|
||||
"verification": {
|
||||
"status": "DEFERRED",
|
||||
"chromium": false,
|
||||
"completionOverlay": false
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609
|
||||
},
|
||||
"nextTask": "WBV2-P26-001"
|
||||
}
|
||||
234
tests/golden/WBV2-P26-000/advanced-implementation-task-plan.json
Normal file
234
tests/golden/WBV2-P26-000/advanced-implementation-task-plan.json
Normal file
@@ -0,0 +1,234 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_ADVANCED_IMPLEMENTATION_WAVE_P26",
|
||||
"status": "ACTIVE_ADVANCED_SOURCE_BACKED_QUEUE",
|
||||
"authority": "user_authorized_implementation_first_execution",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"mainAuthority": "blender_main",
|
||||
"browserPolicy": "chromium_only_for_later_verification",
|
||||
"verificationPolicy": "deferred",
|
||||
"reusePolicy": "source_hash_behavior_hash_and_dedupe_key"
|
||||
},
|
||||
"inventoryPolicy": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayMutation": "forbidden_during_implementation_wave"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P26-000",
|
||||
"phase": "P26",
|
||||
"title": "authorize_advanced_capability_implementation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-008"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P26-000.md",
|
||||
"behavior": "Authorize source-backed implementation for remaining guarded and unexposed capability domains.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-001",
|
||||
"phase": "P26",
|
||||
"title": "implement_geometry_nodes_main_writer",
|
||||
"kind": "feature",
|
||||
"owner": "GEOMETRY",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-000"
|
||||
],
|
||||
"parityId": "GEOMETRY_NODES.MAIN_WRITER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-001.md",
|
||||
"behavior": "Persist validated Geometry Node graphs through the authoritative Main writer.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-002",
|
||||
"phase": "P26",
|
||||
"title": "implement_shader_graph_workbench",
|
||||
"kind": "feature",
|
||||
"owner": "SHADER",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-001"
|
||||
],
|
||||
"parityId": "SHADER.GRAPH_WORKBENCH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-002.md",
|
||||
"behavior": "Expose the source-backed shader graph writer through the workbench.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-003",
|
||||
"phase": "P26",
|
||||
"title": "implement_simulation_physics_particle",
|
||||
"kind": "feature",
|
||||
"owner": "SIMULATION",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-002"
|
||||
],
|
||||
"parityId": "SIMULATION.PHYSICS_PARTICLE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-003.md",
|
||||
"behavior": "Connect physics, particle and cache capability routes to real Main data.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-004",
|
||||
"phase": "P26",
|
||||
"title": "implement_render_compositor_sequencer",
|
||||
"kind": "feature",
|
||||
"owner": "RENDER",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-003"
|
||||
],
|
||||
"parityId": "RENDER.COMPOSITOR_SEQUENCER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-004",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-004.md",
|
||||
"behavior": "Connect render, compositor, sequencer and media playback surfaces.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-005",
|
||||
"phase": "P26",
|
||||
"title": "implement_asset_library_storage",
|
||||
"kind": "feature",
|
||||
"owner": "IO",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-004"
|
||||
],
|
||||
"parityId": "IO.ASSET_LIBRARY_STORAGE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-005",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-005.md",
|
||||
"behavior": "Complete library append, packed assets, OPFS and resource lifecycle paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-006",
|
||||
"phase": "P26",
|
||||
"title": "run_advanced_implementation_smoke",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-005"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-006",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-006.md",
|
||||
"behavior": "Run a bounded build/start smoke before opening the deferred verification wave.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
43
tests/golden/WBV2-P26-000/manifest.json
Normal file
43
tests/golden/WBV2-P26-000/manifest.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P26-000",
|
||||
"parentTask": "WBV2-P25-008",
|
||||
"operation": "AUTHORIZE_ADVANCED_CAPABILITY_IMPLEMENTATION",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "SOURCE_BACKED_ADVANCED_IMPLEMENTATION_QUEUE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P25-008/manifest.json",
|
||||
"sha256": "162336b2d9595b792538eab918b2c6c6b2b282fdce9f7b7d729174fe21672558"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P26-000/advanced-implementation-task-plan.json",
|
||||
"sha256": "6820cd251a685bc53c46f057ffabc9608714f45ce0794705517d20aec4e25f47"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P26-000/advanced-implementation-root-report.json",
|
||||
"sha256": "ae88ad573815bb996f98ca0f3a83385edae414d85da0ca1f9080774ec94f9ced"
|
||||
},
|
||||
"rootCard": {
|
||||
"path": "docs/tasks/WBV2-P26-000.md",
|
||||
"sha256": "c46fbeb82c629571b3a2de6a84be26f928758ecd143fc572d5aea38d98683396"
|
||||
},
|
||||
"rootStatus": {
|
||||
"path": "docs/status/WBV2-P26-000.md",
|
||||
"sha256": "3d9f80cd204d294a8b945807302396708853b6bb0eecd5c4657893c29dc7454b"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"advancedImplementationWave": true,
|
||||
"plannedTasks": 7,
|
||||
"verificationDeferred": true,
|
||||
"completionOverlayWritten": false,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P26-001"
|
||||
}
|
||||
234
tests/golden/WBV2-P26-001/advanced-implementation-task-plan.json
Normal file
234
tests/golden/WBV2-P26-001/advanced-implementation-task-plan.json
Normal file
@@ -0,0 +1,234 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_ADVANCED_IMPLEMENTATION_WAVE_P26",
|
||||
"status": "ACTIVE_ADVANCED_SOURCE_BACKED_QUEUE",
|
||||
"authority": "user_authorized_implementation_first_execution",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"mainAuthority": "blender_main",
|
||||
"browserPolicy": "chromium_only_for_later_verification",
|
||||
"verificationPolicy": "deferred",
|
||||
"reusePolicy": "source_hash_behavior_hash_and_dedupe_key"
|
||||
},
|
||||
"inventoryPolicy": {
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"overlayMutation": "forbidden_during_implementation_wave"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P26-000",
|
||||
"phase": "P26",
|
||||
"title": "authorize_advanced_capability_implementation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P25-008"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-000",
|
||||
"gate": "G1",
|
||||
"card": "docs/tasks/WBV2-P26-000.md",
|
||||
"behavior": "Authorize source-backed implementation for remaining guarded and unexposed capability domains.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-001",
|
||||
"phase": "P26",
|
||||
"title": "implement_geometry_nodes_main_writer",
|
||||
"kind": "feature",
|
||||
"owner": "GEOMETRY",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-000"
|
||||
],
|
||||
"parityId": "GEOMETRY_NODES.MAIN_WRITER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-001",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-001.md",
|
||||
"behavior": "Persist validated Geometry Node graphs through the authoritative Main writer.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-002",
|
||||
"phase": "P26",
|
||||
"title": "implement_shader_graph_workbench",
|
||||
"kind": "feature",
|
||||
"owner": "SHADER",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-001"
|
||||
],
|
||||
"parityId": "SHADER.GRAPH_WORKBENCH",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-002",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-002.md",
|
||||
"behavior": "Expose the source-backed shader graph writer through the workbench.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-003",
|
||||
"phase": "P26",
|
||||
"title": "implement_simulation_physics_particle",
|
||||
"kind": "feature",
|
||||
"owner": "SIMULATION",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-002"
|
||||
],
|
||||
"parityId": "SIMULATION.PHYSICS_PARTICLE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-003",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-003.md",
|
||||
"behavior": "Connect physics, particle and cache capability routes to real Main data.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-004",
|
||||
"phase": "P26",
|
||||
"title": "implement_render_compositor_sequencer",
|
||||
"kind": "feature",
|
||||
"owner": "RENDER",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-003"
|
||||
],
|
||||
"parityId": "RENDER.COMPOSITOR_SEQUENCER",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-004",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-004.md",
|
||||
"behavior": "Connect render, compositor, sequencer and media playback surfaces.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-005",
|
||||
"phase": "P26",
|
||||
"title": "implement_asset_library_storage",
|
||||
"kind": "feature",
|
||||
"owner": "IO",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-004"
|
||||
],
|
||||
"parityId": "IO.ASSET_LIBRARY_STORAGE",
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-005",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-005.md",
|
||||
"behavior": "Complete library append, packed assets, OPFS and resource lifecycle paths.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P26-006",
|
||||
"phase": "P26",
|
||||
"title": "run_advanced_implementation_smoke",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P26-005"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "SOURCE_BACKED",
|
||||
"parallelGroup": "p26-006",
|
||||
"gate": "IMPLEMENTATION",
|
||||
"card": "docs/tasks/WBV2-P26-006.md",
|
||||
"behavior": "Run a bounded build/start smoke before opening the deferred verification wave.",
|
||||
"outputs": [
|
||||
"implementation-report",
|
||||
"manifest",
|
||||
"status"
|
||||
],
|
||||
"acceptance": [
|
||||
"real source or WebEngine Main path is wired",
|
||||
"unsupported input fails closed",
|
||||
"implementation smoke is reproducible",
|
||||
"verification remains deferred"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user