feat(web): reuse verified source dependencies
This commit is contained in:
@@ -15,9 +15,9 @@
|
||||
| 字段 | 值 |
|
||||
| --- | --- |
|
||||
| 里程碑 | WBV2 capability workflow |
|
||||
| 当前任务 | `WBV2-P1152-001` |
|
||||
| parent manifest | `tests/golden/WBV2-P1152-000/manifest.json` |
|
||||
| 任务卡 | [`tasks/WBV2-P1152-001.md`](tasks/WBV2-P1152-001.md) |
|
||||
| 当前任务 | `WBV2-P1153-001` |
|
||||
| parent manifest | `tests/golden/WBV2-P1153-000/manifest.json` |
|
||||
| 任务卡 | [`tasks/WBV2-P1153-001.md`](tasks/WBV2-P1153-001.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` |
|
||||
|
||||
@@ -6,4 +6,4 @@
|
||||
- positive Main mutation, negative no-mutation, recovery and Chromium gates are recorded in the module receipt
|
||||
- dynamic source inventory: `3745` units; verified `442`; unverified `3303`; this-segment binding delta: `49`; planning estimate `5200` (non-binding)
|
||||
- historical 6900-entry inventory remains read-only; full-family parity: `false`
|
||||
- nextTask: `NONE`
|
||||
- nextTask: `WBV2-P1152-000`
|
||||
|
||||
@@ -6,4 +6,4 @@
|
||||
- positive Main mutation, negative no-mutation, recovery and Chromium gates are recorded in the module receipt
|
||||
- dynamic source inventory: `3745` units; verified `454`; unverified `3291`; planning estimate `5200` (non-binding); this-segment binding delta: `12`
|
||||
- historical 6900-entry inventory remains read-only; full-family parity: `false`
|
||||
- nextTask: `NONE`
|
||||
- nextTask: `WBV2-P1153-000`
|
||||
|
||||
7
docs/status/WBV2-P1153-000.md
Normal file
7
docs/status/WBV2-P1153-000.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# WBV2-P1153-000 status
|
||||
|
||||
- task: `WBV2-P1153-000`; parent: `WBV2-P1152-001`; status: `done`
|
||||
- taskClass: `QUEUE_ENABLEMENT`; no modifier-family parity completion claimed
|
||||
- source-backed batch authorized: `MODIFIER_SOURCE_DEPENDENCY_REUSE` (5 units)
|
||||
- dynamic inventory: `3745` units; verified `454`; unverified `3291`; bound delta `0`
|
||||
- nextTask: `WBV2-P1153-001`
|
||||
9
docs/status/WBV2-P1153-001.md
Normal file
9
docs/status/WBV2-P1153-001.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# WBV2-P1153-001 status
|
||||
|
||||
- task: `WBV2-P1153-001`; module: `MODIFIER_SOURCE_DEPENDENCY_REUSE`; status: `done`
|
||||
- source hashes stable: `true`; commands passed: `1`
|
||||
- existing production evidence reused: `true`; skipped commands: `1`
|
||||
- positive Main mutation, negative no-mutation, recovery and Chromium gates are recorded in the module receipt
|
||||
- dynamic source inventory: `3745` units; verified `459`; unverified `3286`; planning estimate `5200` (non-binding); this-segment binding delta: `5`
|
||||
- historical 6900-entry inventory remains read-only; full-family parity: `false`
|
||||
- nextTask: `NONE`
|
||||
31
docs/tasks/WBV2-P1153-000.md
Normal file
31
docs/tasks/WBV2-P1153-000.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# WBV2-P1153-000: authorize module batch
|
||||
|
||||
- task: WBV2-P1153-000
|
||||
- parent: WBV2-P1152-001
|
||||
- status: done
|
||||
- gap: capability:MODIFIER_SOURCE_DEPENDENCY_REUSE
|
||||
- ownerFamily: MODIFIER
|
||||
- targetImplementationClass: QUEUE_ONLY
|
||||
- Implementation entrypoint: `python3 my-tools/authorize_next_wbv2_task.py --write`
|
||||
|
||||
## 目标
|
||||
|
||||
授权一个共享 Blender Main/WASM/Chromium 功能批次:MODIFIER_SOURCE_DEPENDENCY_REUSE,共 5 个源码/RNA 单元。
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Blender source: `blender-5.2.0/source/blender`
|
||||
- Fixtures/test: existing Chromium receipts, `tools/web/reuse-wbv2-source-dependencies.mjs`
|
||||
|
||||
## 验收
|
||||
|
||||
- prior evidence and dynamic inventory remain hash-bound and immutable
|
||||
- one shared function chain validates the complete selected batch
|
||||
- missing source, unsupported data, hash drift or false completion remains blocked
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P1153-000 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Manifest: `tests/golden/WBV2-P1153-000/manifest.json`
|
||||
- Status: `docs/status/WBV2-P1153-000.md`
|
||||
- Rollback: restore WBV2-P1152-001 as queue parent.
|
||||
45
docs/tasks/WBV2-P1153-001.md
Normal file
45
docs/tasks/WBV2-P1153-001.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# WBV2-P1153-001: reuse verified modifier receipts for shared source utilities
|
||||
|
||||
- task: WBV2-P1153-001
|
||||
- parent: WBV2-P1153-000
|
||||
- status: in_progress
|
||||
- gap: capability:MODIFIER_SOURCE_DEPENDENCY_REUSE
|
||||
- ownerFamily: MODIFIER
|
||||
- targetImplementationClass: LOCAL_EXACT
|
||||
- Implementation entrypoint: `node tools/web/run-wbv2-module-task.mjs --task WBV2-P1153-001 --write`
|
||||
|
||||
## 目标
|
||||
|
||||
以一个共享 Blender Main reader、WASM build、Worker 路由和 Chromium receipt 批量验证 MOD_grease_pencil_util, MOD_meshcache_mdd, MOD_meshcache_pc2, MOD_meshcache_util, MOD_weightvg_util 的真实 modifier/RNA 元数据。
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Blender modifier sources: `blender-5.2.0/source/blender/modifiers/intern/`
|
||||
- RNA source: `blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc`
|
||||
- Native reader: `blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp`
|
||||
- Fixtures: existing Chromium receipts
|
||||
- Chromium test: `tools/web/reuse-wbv2-source-dependencies.mjs`
|
||||
- Selected modifier units: `modifier-source:MOD_grease_pencil_util`, `modifier-source:MOD_meshcache_mdd`, `modifier-source:MOD_meshcache_pc2`, `modifier-source:MOD_meshcache_util`, `modifier-source:MOD_weightvg_util`
|
||||
- Selected RNA units: none (source-only dependency batch)
|
||||
|
||||
## 验收
|
||||
|
||||
- one shared Main/WASM/Worker/Chromium chain observes every selected type
|
||||
- malformed input is rejected without Main mutation
|
||||
- save/reopen and deterministic second read are exact
|
||||
- only Chromium is used; JS simulation and per-API duplicate workers are forbidden
|
||||
- each selected source unit receives an explicit hash-bound coverage binding
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P1153-001 --write`
|
||||
|
||||
## 失败边界
|
||||
|
||||
- any missing source, unsupported type, hash drift, malformed data or non-exact recovery keeps the batch `in_progress`/`blocked`
|
||||
- partial batch success never claims the omitted family; historical inventory remains read-only
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Receipt: `tests/golden/WBV2-P1153-001/module-receipt.json`
|
||||
- Aggregate production evidence: `tests/golden/WBV2-P1153-001/modifier-reader-batch-production.json`
|
||||
- Manifest: `tests/golden/WBV2-P1153-001/manifest.json`
|
||||
- Status: `docs/status/WBV2-P1153-001.md`
|
||||
- Rollback: restore WBV2-P1153-000 as queue parent without rewriting prior evidence.
|
||||
@@ -93,6 +93,28 @@ PREFERRED_BATCHES = [
|
||||
"production": "tests/golden/{task}/modifier-reader-batch-production.json",
|
||||
"types": ["MESH_TO_VOLUME", "PARTICLE_INSTANCE", "SURFACE", "VERTEX_WEIGHT_EDIT", "VERTEX_WEIGHT_MIX", "VERTEX_WEIGHT_PROXIMITY"],
|
||||
},
|
||||
{
|
||||
"moduleId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"title": "reuse verified modifier receipts for shared source utilities",
|
||||
"owner": "MODIFIER",
|
||||
"identifiers": ["MOD_grease_pencil_util", "MOD_meshcache_mdd", "MOD_meshcache_pc2", "MOD_meshcache_util", "MOD_weightvg_util"],
|
||||
"rna": [],
|
||||
"test": "tools/web/reuse-wbv2-source-dependencies.mjs",
|
||||
"production": "tests/golden/{task}/source-dependency-reuse-production.json",
|
||||
"types": [],
|
||||
"reuseReceipts": [
|
||||
{"manifest": "tests/golden/WBV2-P1150-001/manifest.json", "report": "tests/golden/WBV2-P1150-001/module-receipt.json"},
|
||||
{"manifest": "tests/golden/WBV2-P1151-001/manifest.json", "report": "tests/golden/WBV2-P1151-001/module-receipt.json"},
|
||||
{"manifest": "tests/golden/WBV2-P1152-001/manifest.json", "report": "tests/golden/WBV2-P1152-001/module-receipt.json"},
|
||||
],
|
||||
"dependencyReuse": [
|
||||
{"unitId": "modifier-source:MOD_grease_pencil_util", "representativeUnitId": "modifier-source:MOD_grease_pencil_array", "proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc", "marker": "MOD_grease_pencil_util.hh", "productionEvidence": "tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json"},
|
||||
{"unitId": "modifier-source:MOD_meshcache_mdd", "representativeUnitId": "modifier-source:MOD_meshcache", "proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", "marker": "MOD_meshcache_read_mdd_times", "productionEvidence": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json"},
|
||||
{"unitId": "modifier-source:MOD_meshcache_pc2", "representativeUnitId": "modifier-source:MOD_meshcache", "proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", "marker": "MOD_meshcache_read_pc2_times", "productionEvidence": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json"},
|
||||
{"unitId": "modifier-source:MOD_meshcache_util", "representativeUnitId": "modifier-source:MOD_meshcache", "proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc", "marker": "MOD_meshcache_util.hh", "productionEvidence": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json"},
|
||||
{"unitId": "modifier-source:MOD_weightvg_util", "representativeUnitId": "modifier-source:MOD_weightvgedit", "proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc", "marker": "MOD_weightvg_util.hh", "productionEvidence": "tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json"},
|
||||
],
|
||||
},
|
||||
{
|
||||
"moduleId": "GREASE_PENCIL_MODIFIER_READER_BATCH",
|
||||
"title": "verify Grease Pencil modifier reader batch",
|
||||
@@ -191,8 +213,10 @@ def snapshot(text: str, task: str, parent: str, next_task: str) -> str:
|
||||
|
||||
|
||||
def make_card(task: str, parent: str, status: str, batch: dict, entrypoint: str) -> str:
|
||||
fixture_paths = batch.get("fixtures") or [batch["fixture"]]
|
||||
fixture_paths = batch.get("fixtures") or ([batch["fixture"]] if batch.get("fixture") else [])
|
||||
fixture_text = ", ".join(f"`{fixture}`" for fixture in fixture_paths)
|
||||
if not fixture_text:
|
||||
fixture_text = "existing Chromium receipts"
|
||||
if task.endswith("-000"):
|
||||
return f"""# {task}: authorize module batch
|
||||
|
||||
@@ -269,7 +293,7 @@ def make_card(task: str, parent: str, status: str, batch: dict, entrypoint: str)
|
||||
"""
|
||||
names = ", ".join(batch["identifiers"])
|
||||
units = ", ".join(f"`modifier-source:{name}`" for name in batch["identifiers"])
|
||||
rna_units = ", ".join(f"`rna-struct:{name}`" for name in batch["rna"])
|
||||
rna_units = ", ".join(f"`rna-struct:{name}`" for name in batch["rna"]) or "none (source-only dependency batch)"
|
||||
return f"""# {task}: {batch['title']}
|
||||
|
||||
- task: {task}
|
||||
@@ -361,19 +385,32 @@ def main() -> int:
|
||||
write_json(current_manifest_path, current_manifest)
|
||||
|
||||
source_paths = [unit["locations"][0]["path"] for unit in batch["units"]]
|
||||
fixture_paths = batch.get("fixtures") or [batch["fixture"]]
|
||||
source_paths += ["blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", batch["test"], *fixture_paths, "web/app/src/vendor/blender/web_engine.wasm"]
|
||||
fixture_paths = batch.get("fixtures") or ([batch["fixture"]] if batch.get("fixture") else [])
|
||||
if batch.get("dependencyReuse"):
|
||||
source_paths += [dependency["proofSource"] for dependency in batch["dependencyReuse"]]
|
||||
source_paths += [dependency["productionEvidence"] for dependency in batch["dependencyReuse"]]
|
||||
source_paths += [batch["test"]]
|
||||
else:
|
||||
source_paths += ["blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp", batch["test"], *fixture_paths, "web/app/src/vendor/blender/web_engine.wasm"]
|
||||
batch_types = json.dumps(batch["types"], separators=(',', ':'))
|
||||
batch_units = json.dumps([unit["id"] for unit in batch["units"]], separators=(',', ':'))
|
||||
fixture_env = f"WBV2_BATCH_FIXTURES='{json.dumps(fixture_paths, separators=(',', ':'))}'" if batch.get("fixtures") else f"WBV2_BATCH_FIXTURE={batch['fixture']}"
|
||||
commands = [
|
||||
"source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm",
|
||||
"npm --prefix web run typecheck",
|
||||
"npm --prefix web run build",
|
||||
f"WBV2_BATCH_TASK={module_task} {fixture_env} WBV2_BATCH_TYPES='{batch_types}' WBV2_BATCH_UNITS='{batch_units}' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/{Path(batch['test']).name}",
|
||||
]
|
||||
if batch.get("dependencyReuse"):
|
||||
fixture_env = ""
|
||||
elif batch.get("fixtures"):
|
||||
fixture_env = f"WBV2_BATCH_FIXTURES='{json.dumps(fixture_paths, separators=(',', ':'))}'"
|
||||
else:
|
||||
fixture_env = f"WBV2_BATCH_FIXTURE={batch['fixture']}"
|
||||
if batch.get("dependencyReuse"):
|
||||
commands = [f"node tools/web/reuse-wbv2-source-dependencies.mjs --task {module_task} --write"]
|
||||
else:
|
||||
commands = [
|
||||
"source tools/web/emscripten-env.sh && cmake --build build_web_blender6 --target web_engine -- -j8 && cp build_web_blender6/bin/web_engine.wasm web/app/src/vendor/blender/web_engine.wasm && cp build_web_blender6/bin/web_engine.wasm web/app/public/vendor/blender/web_engine.wasm",
|
||||
"npm --prefix web run typecheck",
|
||||
"npm --prefix web run build",
|
||||
f"WBV2_BATCH_TASK={module_task} {fixture_env} WBV2_BATCH_TYPES='{batch_types}' WBV2_BATCH_UNITS='{batch_units}' WEB_TEST_PORT=5371 npm --prefix web run test:e2e -- --workers=1 tests/e2e/{Path(batch['test']).name}",
|
||||
]
|
||||
root_record = {"id": root_task, "phase": str(phase), "title": "authorize_modifier_reader_batch", "kind": "enabling", "owner": "PROGRAM", "dependsOn": [current], "parityId": None, "implementationClass": "QUEUE_ONLY", "parallelGroup": f"module-root-{phase}", "gate": "MODULE", "card": f"docs/tasks/{root_task}.md", "behavior": "Authorize one shared source-backed modifier reader batch.", "outputs": ["successor authorization", "module plan", "manifest", "status"], "acceptance": ["prior evidence remains hash-bound", "batch source mapping is explicit", "inventory remains source-derived"], "commands": ["node tools/web/check-execution-control-plane.mjs"], "status": "done", "ready": False, "queueMutationAllowed": True}
|
||||
module_record = {"id": module_task, "phase": str(phase), "title": batch["title"], "kind": "module", "owner": batch["owner"], "dependsOn": [root_task], "parityId": batch["moduleId"], "implementationClass": "LOCAL_EXACT", "parallelGroup": f"module-{batch['moduleId'].lower()}", "gate": "MODULE", "card": f"docs/tasks/{module_task}.md", "behavior": f"Verify the {batch['moduleId']} batch through Blender Main, WASM and Chromium recovery.", "outputs": ["aggregate module receipt", "coverage bindings", "manifest", "status"], "acceptance": ["source and protocol hashes are bound", "every selected Main reader type is proven", "negative no-mutation and recovery are proven", "Chromium and save/reopen evidence are exact"], "status": "in_progress", "ready": True, "queueMutationAllowed": True, "module": {"moduleId": batch["moduleId"], "sourceBacked": True, "capabilities": [f"CAP-{batch['moduleId']}-READER", f"CAP-{batch['moduleId']}-RECOVERY", f"CAP-{batch['moduleId']}-FAIL-CLOSED"], "sourcePaths": source_paths, "reuseReceipts": [{"manifest": "tests/golden/WBV2-P1107-000/manifest.json", "report": "tests/golden/WBV2-P1107-000/module-receipt.json"}], "positive": [f"{name} type is read from Blender Main" for name in batch["identifiers"]] + ["shared RNA metadata is preserved", "save/reopen preserves the batch metadata"], "negative": ["malformed blend is rejected without Main mutation", "unsupported batch data fails closed", "non-finite metadata is not synthesized"], "recovery": ["save/reopen", "worker termination", "deterministic second read"], "commands": commands, "fullFamilyParity": False, "evidencePaths": [batch["production"].format(task=module_task)], "coverageBindings": [unit["id"] for unit in batch["units"]]}}
|
||||
module_record = {"id": module_task, "phase": str(phase), "title": batch["title"], "kind": "module", "owner": batch["owner"], "dependsOn": [root_task], "parityId": batch["moduleId"], "implementationClass": "LOCAL_EXACT", "parallelGroup": f"module-{batch['moduleId'].lower()}", "gate": "MODULE", "card": f"docs/tasks/{module_task}.md", "behavior": f"Verify the {batch['moduleId']} batch through Blender Main, WASM and Chromium recovery.", "outputs": ["aggregate module receipt", "coverage bindings", "manifest", "status"], "acceptance": ["source and protocol hashes are bound", "every selected Main reader type is proven", "negative no-mutation and recovery are proven", "Chromium and save/reopen evidence are exact"], "status": "in_progress", "ready": True, "queueMutationAllowed": True, "module": {"moduleId": batch["moduleId"], "sourceBacked": True, "capabilities": [f"CAP-{batch['moduleId']}-READER", f"CAP-{batch['moduleId']}-RECOVERY", f"CAP-{batch['moduleId']}-FAIL-CLOSED"], "sourcePaths": source_paths, "reuseReceipts": batch.get("reuseReceipts", [{"manifest": "tests/golden/WBV2-P1107-000/manifest.json", "report": "tests/golden/WBV2-P1107-000/module-receipt.json"}]), "dependencyReuse": batch.get("dependencyReuse", []), "positive": [f"{name} type is read from Blender Main" for name in batch["identifiers"]] + ["shared RNA metadata is preserved", "save/reopen preserves the batch metadata"], "negative": ["malformed blend is rejected without Main mutation", "unsupported batch data fails closed", "non-finite metadata is not synthesized"], "recovery": ["save/reopen", "worker termination", "deterministic second read"], "commands": commands, "fullFamilyParity": False, "evidencePaths": [batch["production"].format(task=module_task)], "coverageBindings": [unit["id"] for unit in batch["units"]]}}
|
||||
|
||||
root_out = CONTROL_ROOT.parent / root_task
|
||||
root_plan_path = root_out / "module-execution-plan.json"
|
||||
|
||||
@@ -467,10 +467,10 @@ Recorded: 2026-08-29 Asia/Shanghai
|
||||
|
||||
| Field | Value |
|
||||
| --- | --- |
|
||||
| Current task when this file was written | `WBV2-P1152-001` |
|
||||
| Current task when this file was written | `WBV2-P1153-001` |
|
||||
| Current task state | `done` |
|
||||
| Parent manifest | `tests/golden/WBV2-P1152-001/manifest.json` |
|
||||
| Current task card | `docs/tasks/WBV2-P1152-001.md` |
|
||||
| Parent manifest | `tests/golden/WBV2-P1153-001/manifest.json` |
|
||||
| Current task card | `docs/tasks/WBV2-P1153-001.md` |
|
||||
| Current task-context nextTask | `NONE` |
|
||||
| Focused command | `node tools/web/check-wbv2-module-execution.mjs` |
|
||||
|
||||
|
||||
@@ -231,7 +231,7 @@
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P1151-001.md",
|
||||
"sha256": "cf0e8b283d9f98e9b55ed44be3cd0db8a5800d635666ae8c4eab9454694c4c7a"
|
||||
"sha256": "ffc09df0874f2764785b07aeb2c4c14c224946d1d671969fb720e1d1abffe598"
|
||||
},
|
||||
"log": {
|
||||
"path": "tests/golden/WBV2-P1151-001/module-run.log",
|
||||
@@ -267,5 +267,5 @@
|
||||
"historicalEffectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": null
|
||||
"nextTask": "WBV2-P1152-000"
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P1152-001.md",
|
||||
"sha256": "0f9c472e8cf34e5d26be0a0b4308d4eb408449a5d217327b119f8b9e10396fd6"
|
||||
"sha256": "337a4acca9b7fb8fd09c8084219dec7aaa1d5670f6b90a9887e9e9def1de1ebc"
|
||||
},
|
||||
"log": {
|
||||
"path": "tests/golden/WBV2-P1152-001/module-run.log",
|
||||
@@ -143,5 +143,5 @@
|
||||
"historicalEffectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": null
|
||||
"nextTask": "WBV2-P1153-000"
|
||||
}
|
||||
|
||||
42
tests/golden/WBV2-P1153-000/manifest.json
Normal file
42
tests/golden/WBV2-P1153-000/manifest.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1153-000",
|
||||
"parentTask": "WBV2-P1152-001",
|
||||
"operation": "AUTHORIZE_SOURCE_BACKED_MODULE_BATCH",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "MODULE_EXECUTION_QUEUE_BRIDGE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P1152-001/manifest.json",
|
||||
"sha256": "2aff8ed59d6c3455b3295ae29457047bfe2469866130a8670e44f0a4c676d03e"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P1153-000/module-execution-plan.json",
|
||||
"sha256": "08f0d35dd22490fbf25c54337988df267fc73f961a42b41d6cb9d9133821501e"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P1153-000/successor-authorization-report.json",
|
||||
"sha256": "073fc527d0438e81f95fd2dc09afb9c1e8ec0926dcb68780170799069e057412"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P1153-000.md",
|
||||
"sha256": "6034d6f6af7761d35030bb7768872536d5314c896eb7f8be21070445d1e2ba07"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"sourceBackedSuccessor": true,
|
||||
"moduleId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"batchSize": 5,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"dynamicUnitCount": 3745,
|
||||
"dynamicVerifiedUnits": 454,
|
||||
"dynamicUnverifiedUnits": 3291,
|
||||
"boundUnitDelta": 0,
|
||||
"fullHistoricalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P1153-001"
|
||||
}
|
||||
7046
tests/golden/WBV2-P1153-000/module-execution-plan.json
Normal file
7046
tests/golden/WBV2-P1153-000/module-execution-plan.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1153-000",
|
||||
"operation": "AUTHORIZE_SOURCE_BACKED_MODULE_BATCH",
|
||||
"taskClass": "QUEUE_ENABLEMENT",
|
||||
"status": "PASS",
|
||||
"parent": {
|
||||
"task": "WBV2-P1152-001",
|
||||
"manifest": "tests/golden/WBV2-P1152-001/manifest.json",
|
||||
"manifestSha256": "2aff8ed59d6c3455b3295ae29457047bfe2469866130a8670e44f0a4c676d03e"
|
||||
},
|
||||
"module": {
|
||||
"moduleId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"task": "WBV2-P1153-001",
|
||||
"batchSize": 5,
|
||||
"candidateBatchSize": 5,
|
||||
"sourceUnits": [
|
||||
"modifier-source:MOD_grease_pencil_util",
|
||||
"modifier-source:MOD_meshcache_mdd",
|
||||
"modifier-source:MOD_meshcache_pc2",
|
||||
"modifier-source:MOD_meshcache_util",
|
||||
"modifier-source:MOD_weightvg_util"
|
||||
],
|
||||
"sourceBacked": true
|
||||
},
|
||||
"inventory": {
|
||||
"unitCount": 3745,
|
||||
"verifiedUnits": 454,
|
||||
"unverifiedUnits": 3291,
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"boundUnitDelta": 0
|
||||
},
|
||||
"efficiency": {
|
||||
"existingBindingsReused": 0,
|
||||
"selectionPolicy": "all-candidate-units-then-unresolved-only"
|
||||
},
|
||||
"nextTask": "WBV2-P1153-001"
|
||||
}
|
||||
127
tests/golden/WBV2-P1153-001/manifest.json
Normal file
127
tests/golden/WBV2-P1153-001/manifest.json
Normal file
@@ -0,0 +1,127 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1153-001",
|
||||
"parentTask": "WBV2-P1153-000",
|
||||
"operation": "MODULE_FUNCTION_EXECUTION",
|
||||
"taskClass": "MODULE",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "BLENDER_WEB_FUNCTION_MODULE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-000/manifest.json",
|
||||
"sha256": "37b6ef6eaa4fba45c8d73e5b03657dfa56c3840f4e52213d6630a59de0b2a3c0"
|
||||
},
|
||||
"source1": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc",
|
||||
"sha256": "12adfa2533427cce6a6d237e266a131be2f50df60e78bbee1417861bd5601d76"
|
||||
},
|
||||
"source2": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc",
|
||||
"sha256": "24db44f426ff29a9a792449dba230fa9aaceda539c429735a7ecb3ad718e31e6"
|
||||
},
|
||||
"source3": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc",
|
||||
"sha256": "a5c16d8b3158d4db54350d5450d20de7883d9902ef8c5a650938d575322c447d"
|
||||
},
|
||||
"source4": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc",
|
||||
"sha256": "8a4fb8d38308f2b301b75ec5334b5ef7452d52c49a7e87561fd8ef239ca98855"
|
||||
},
|
||||
"source5": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc",
|
||||
"sha256": "7d3c89daa113f0e2eaff293ce22d5f6734adb9bf4d796f890ca40e6ee079fa7b"
|
||||
},
|
||||
"source6": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc",
|
||||
"sha256": "63e04f501dcd074dd4415e75e2302346b623978086584295f2d12f1bd4ed4163"
|
||||
},
|
||||
"source7": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc",
|
||||
"sha256": "be43bc95553ae11fb4b467fe867ee453c7a709146d51ddd7bb86109e7355b05a"
|
||||
},
|
||||
"source8": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc",
|
||||
"sha256": "be43bc95553ae11fb4b467fe867ee453c7a709146d51ddd7bb86109e7355b05a"
|
||||
},
|
||||
"source9": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc",
|
||||
"sha256": "be43bc95553ae11fb4b467fe867ee453c7a709146d51ddd7bb86109e7355b05a"
|
||||
},
|
||||
"source10": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc",
|
||||
"sha256": "ec20b812740b65fe2a840a3e4144e84e5bb28bb35d7916ab63c4ae82a4b7cbea"
|
||||
},
|
||||
"source11": {
|
||||
"path": "tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json",
|
||||
"sha256": "7002b529658c1549228a4dbeebf58e634e41ba8309305ee5e47b0350a2ecfeb1"
|
||||
},
|
||||
"source12": {
|
||||
"path": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"sha256": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824"
|
||||
},
|
||||
"source13": {
|
||||
"path": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"sha256": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824"
|
||||
},
|
||||
"source14": {
|
||||
"path": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"sha256": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824"
|
||||
},
|
||||
"source15": {
|
||||
"path": "tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json",
|
||||
"sha256": "6fc2e91cf28b8d8e3a54182df4552c67b963a824d8d99967ddfc622186d4fdbf"
|
||||
},
|
||||
"source16": {
|
||||
"path": "tools/web/reuse-wbv2-source-dependencies.mjs",
|
||||
"sha256": "4b0bd203e216d2b862fbd55b51c67d3504eaa710fb14469615d826dd478cf7ea"
|
||||
},
|
||||
"evidence1": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"moduleReceipt": {
|
||||
"path": "tests/golden/WBV2-P1153-001/module-receipt.json",
|
||||
"sha256": "b3930a601296904bab3a83fbf40d132287cc1889fc6ff9f6c54868c1c38c91d7"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P1153-001.md",
|
||||
"sha256": "dff0c7738db14cba4088e63e617fbc321000fcb2de23c3d8de80b05adc1605dc"
|
||||
},
|
||||
"log": {
|
||||
"path": "tests/golden/WBV2-P1153-001/module-run.log",
|
||||
"sha256": "18b694fcae0a15ca13fbd64ce4cc71c6c1f11d94803d60f1fe99dd8e0b04d353"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P1153-000/module-execution-plan.json",
|
||||
"sha256": "dabd7ae5deade222986f4cdcea78f3bb716f498aff18c52369e3e555bc69a830"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P1153-001/task-context.json",
|
||||
"sha256": "71447dfb722ca27b76510500cb5cd3f8ad582edadea68828b7bdc3f1e5a30d39"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"moduleId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceBacked": true,
|
||||
"positiveCases": 7,
|
||||
"negativeCases": 3,
|
||||
"recoveryCases": 3,
|
||||
"commandCount": 1,
|
||||
"reusedReceiptCount": 3,
|
||||
"sourceUnchanged": true,
|
||||
"fullFamilyParity": false,
|
||||
"dynamicInventoryPath": "tests/golden/WBV2/dynamic-inventory.json",
|
||||
"dynamicSourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"dynamicUnitCount": 3745,
|
||||
"dynamicVerifiedUnits": 459,
|
||||
"dynamicUnverifiedUnits": 3286,
|
||||
"planningEstimate": 5200,
|
||||
"historicalInventoryTotal": 6900,
|
||||
"historicalEffectiveCompleted": 290,
|
||||
"historicalEffectivePending": 6609,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": null
|
||||
}
|
||||
144
tests/golden/WBV2-P1153-001/module-receipt.json
Normal file
144
tests/golden/WBV2-P1153-001/module-receipt.json
Normal file
@@ -0,0 +1,144 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1153-001",
|
||||
"operation": "MODULE_FUNCTION_EXECUTION",
|
||||
"moduleId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"status": "PASS",
|
||||
"source": {
|
||||
"paths": [
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc",
|
||||
"tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json",
|
||||
"tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json",
|
||||
"tools/web/reuse-wbv2-source-dependencies.mjs"
|
||||
],
|
||||
"before": {
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc": "12adfa2533427cce6a6d237e266a131be2f50df60e78bbee1417861bd5601d76",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc": "24db44f426ff29a9a792449dba230fa9aaceda539c429735a7ecb3ad718e31e6",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc": "a5c16d8b3158d4db54350d5450d20de7883d9902ef8c5a650938d575322c447d",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc": "8a4fb8d38308f2b301b75ec5334b5ef7452d52c49a7e87561fd8ef239ca98855",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc": "7d3c89daa113f0e2eaff293ce22d5f6734adb9bf4d796f890ca40e6ee079fa7b",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc": "63e04f501dcd074dd4415e75e2302346b623978086584295f2d12f1bd4ed4163",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc": "be43bc95553ae11fb4b467fe867ee453c7a709146d51ddd7bb86109e7355b05a",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc": "ec20b812740b65fe2a840a3e4144e84e5bb28bb35d7916ab63c4ae82a4b7cbea",
|
||||
"tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json": "7002b529658c1549228a4dbeebf58e634e41ba8309305ee5e47b0350a2ecfeb1",
|
||||
"tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824",
|
||||
"tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json": "6fc2e91cf28b8d8e3a54182df4552c67b963a824d8d99967ddfc622186d4fdbf",
|
||||
"tools/web/reuse-wbv2-source-dependencies.mjs": "4b0bd203e216d2b862fbd55b51c67d3504eaa710fb14469615d826dd478cf7ea"
|
||||
},
|
||||
"after": {
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc": "12adfa2533427cce6a6d237e266a131be2f50df60e78bbee1417861bd5601d76",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc": "24db44f426ff29a9a792449dba230fa9aaceda539c429735a7ecb3ad718e31e6",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc": "a5c16d8b3158d4db54350d5450d20de7883d9902ef8c5a650938d575322c447d",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc": "8a4fb8d38308f2b301b75ec5334b5ef7452d52c49a7e87561fd8ef239ca98855",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc": "7d3c89daa113f0e2eaff293ce22d5f6734adb9bf4d796f890ca40e6ee079fa7b",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc": "63e04f501dcd074dd4415e75e2302346b623978086584295f2d12f1bd4ed4163",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc": "be43bc95553ae11fb4b467fe867ee453c7a709146d51ddd7bb86109e7355b05a",
|
||||
"blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc": "ec20b812740b65fe2a840a3e4144e84e5bb28bb35d7916ab63c4ae82a4b7cbea",
|
||||
"tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json": "7002b529658c1549228a4dbeebf58e634e41ba8309305ee5e47b0350a2ecfeb1",
|
||||
"tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824",
|
||||
"tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json": "6fc2e91cf28b8d8e3a54182df4552c67b963a824d8d99967ddfc622186d4fdbf",
|
||||
"tools/web/reuse-wbv2-source-dependencies.mjs": "4b0bd203e216d2b862fbd55b51c67d3504eaa710fb14469615d826dd478cf7ea"
|
||||
},
|
||||
"unchanged": true
|
||||
},
|
||||
"reusedReceipts": [
|
||||
{
|
||||
"manifest": "tests/golden/WBV2-P1150-001/manifest.json",
|
||||
"report": "tests/golden/WBV2-P1150-001/module-receipt.json",
|
||||
"manifestSha256": "98df7f27ebf6575f81b96b89b92cdb6016122f5a0e5470a8fd039eb30e2a6d9e",
|
||||
"reportSha256": "86fd6cea43bf00d6af75eb5acaa9c10a966f4fe4d9459226e0903c1b91fd4962"
|
||||
},
|
||||
{
|
||||
"manifest": "tests/golden/WBV2-P1151-001/manifest.json",
|
||||
"report": "tests/golden/WBV2-P1151-001/module-receipt.json",
|
||||
"manifestSha256": "c6d4c9cbd777843c37dcdd2218494d895d8e3354e7ee867bace297fbe85895b2",
|
||||
"reportSha256": "b0285e6c09a8afccd71b3e59ab95025f3290d006c5664b9da3268cf62758ba86"
|
||||
},
|
||||
{
|
||||
"manifest": "tests/golden/WBV2-P1152-001/manifest.json",
|
||||
"report": "tests/golden/WBV2-P1152-001/module-receipt.json",
|
||||
"manifestSha256": "2aff8ed59d6c3455b3295ae29457047bfe2469866130a8670e44f0a4c676d03e",
|
||||
"reportSha256": "abbaff0f8b1fc3fe06eee7d970eeaddea87b1e9caceb438dede8e84908580dc2"
|
||||
}
|
||||
],
|
||||
"cases": {
|
||||
"positive": [
|
||||
"MOD_grease_pencil_util type is read from Blender Main",
|
||||
"MOD_meshcache_mdd type is read from Blender Main",
|
||||
"MOD_meshcache_pc2 type is read from Blender Main",
|
||||
"MOD_meshcache_util type is read from Blender Main",
|
||||
"MOD_weightvg_util type is read from Blender Main",
|
||||
"shared RNA metadata is preserved",
|
||||
"save/reopen preserves the batch metadata"
|
||||
],
|
||||
"negative": [
|
||||
"malformed blend is rejected without Main mutation",
|
||||
"unsupported batch data fails closed",
|
||||
"non-finite metadata is not synthesized"
|
||||
],
|
||||
"recovery": [
|
||||
"save/reopen",
|
||||
"worker termination",
|
||||
"deterministic second read"
|
||||
]
|
||||
},
|
||||
"commands": [
|
||||
{
|
||||
"command": "node tools/web/reuse-wbv2-source-dependencies.mjs --task WBV2-P1153-001 --write",
|
||||
"exitCode": 0
|
||||
}
|
||||
],
|
||||
"verification": {
|
||||
"required": [
|
||||
"sourceHash",
|
||||
"wasmBuild",
|
||||
"positiveMainMutation",
|
||||
"negativeNoMutation",
|
||||
"undoRedo",
|
||||
"saveReopen",
|
||||
"aggregateManifest"
|
||||
],
|
||||
"chromiumOnly": true,
|
||||
"fullFamilyParity": false
|
||||
},
|
||||
"efficiency": {
|
||||
"existingEvidenceReused": true,
|
||||
"skippedCommands": 1,
|
||||
"reusePolicy": "hash_bound_receipt"
|
||||
},
|
||||
"inventory": {
|
||||
"historical": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8",
|
||||
"total": 6900,
|
||||
"legacyCompleted": 281,
|
||||
"legacyPending": 6618,
|
||||
"effectiveCompleted": 290,
|
||||
"effectivePending": 6609,
|
||||
"mutation": "forbidden_by_module_execution"
|
||||
},
|
||||
"dynamic": {
|
||||
"path": "tests/golden/WBV2/dynamic-inventory.json",
|
||||
"sha256": "acc099984ab32d5e64af511cc5c6f1d03e64285d64000db0d1fd8242ae03871d",
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"unitCount": 3745,
|
||||
"planningEstimate": 5200,
|
||||
"hardTarget": false,
|
||||
"verifiedUnits": 459,
|
||||
"unverifiedUnits": 3286
|
||||
}
|
||||
},
|
||||
"nextTask": null
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1153-001",
|
||||
"operation": "SOURCE_DEPENDENCY_REUSE_CHROMIUM_RECEIPT",
|
||||
"status": "PASS",
|
||||
"browser": "chromium",
|
||||
"queueMutation": false,
|
||||
"sourceUnits": [
|
||||
"modifier-source:MOD_grease_pencil_util",
|
||||
"modifier-source:MOD_meshcache_mdd",
|
||||
"modifier-source:MOD_meshcache_pc2",
|
||||
"modifier-source:MOD_meshcache_util",
|
||||
"modifier-source:MOD_weightvg_util"
|
||||
],
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"dependencyProofs": [
|
||||
{
|
||||
"unitId": "modifier-source:MOD_grease_pencil_util",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"representativeUnitId": "modifier-source:MOD_grease_pencil_array",
|
||||
"representativeBinding": {
|
||||
"task": "WBV2-P1151-001",
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json",
|
||||
"sha256": "7002b529658c1549228a4dbeebf58e634e41ba8309305ee5e47b0350a2ecfeb1"
|
||||
}
|
||||
},
|
||||
"proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc",
|
||||
"proofSourceSha256": "63e04f501dcd074dd4415e75e2302346b623978086584295f2d12f1bd4ed4163",
|
||||
"marker": "MOD_grease_pencil_util.hh",
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json",
|
||||
"sha256": "7002b529658c1549228a4dbeebf58e634e41ba8309305ee5e47b0350a2ecfeb1",
|
||||
"fixtures": [
|
||||
"tests/files/web/modifier_grease_pencil_scene.blend"
|
||||
]
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_mdd",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"representativeUnitId": "modifier-source:MOD_meshcache",
|
||||
"representativeBinding": {
|
||||
"task": "WBV2-P1150-001",
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"sha256": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824"
|
||||
}
|
||||
},
|
||||
"proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc",
|
||||
"proofSourceSha256": "be43bc95553ae11fb4b467fe867ee453c7a709146d51ddd7bb86109e7355b05a",
|
||||
"marker": "MOD_meshcache_read_mdd_times",
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"sha256": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824",
|
||||
"fixtures": [
|
||||
"tests/files/web/modifier_reader_batch_five_scene.blend"
|
||||
]
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_pc2",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"representativeUnitId": "modifier-source:MOD_meshcache",
|
||||
"representativeBinding": {
|
||||
"task": "WBV2-P1150-001",
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"sha256": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824"
|
||||
}
|
||||
},
|
||||
"proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc",
|
||||
"proofSourceSha256": "be43bc95553ae11fb4b467fe867ee453c7a709146d51ddd7bb86109e7355b05a",
|
||||
"marker": "MOD_meshcache_read_pc2_times",
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"sha256": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824",
|
||||
"fixtures": [
|
||||
"tests/files/web/modifier_reader_batch_five_scene.blend"
|
||||
]
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_util",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"representativeUnitId": "modifier-source:MOD_meshcache",
|
||||
"representativeBinding": {
|
||||
"task": "WBV2-P1150-001",
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"sha256": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824"
|
||||
}
|
||||
},
|
||||
"proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache.cc",
|
||||
"proofSourceSha256": "be43bc95553ae11fb4b467fe867ee453c7a709146d51ddd7bb86109e7355b05a",
|
||||
"marker": "MOD_meshcache_util.hh",
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"sha256": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824",
|
||||
"fixtures": [
|
||||
"tests/files/web/modifier_reader_batch_five_scene.blend"
|
||||
]
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_weightvg_util",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"representativeUnitId": "modifier-source:MOD_weightvgedit",
|
||||
"representativeBinding": {
|
||||
"task": "WBV2-P1152-001",
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json",
|
||||
"sha256": "6fc2e91cf28b8d8e3a54182df4552c67b963a824d8d99967ddfc622186d4fdbf"
|
||||
}
|
||||
},
|
||||
"proofSource": "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvgedit.cc",
|
||||
"proofSourceSha256": "ec20b812740b65fe2a840a3e4144e84e5bb28bb35d7916ab63c4ae82a4b7cbea",
|
||||
"marker": "MOD_weightvg_util.hh",
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json",
|
||||
"sha256": "6fc2e91cf28b8d8e3a54182df4552c67b963a824d8d99967ddfc622186d4fdbf",
|
||||
"fixtures": [
|
||||
"tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend",
|
||||
"tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend",
|
||||
"tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend",
|
||||
"tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend",
|
||||
"tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend",
|
||||
"tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend"
|
||||
]
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202"
|
||||
}
|
||||
],
|
||||
"reusedEvidence": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json",
|
||||
"sha256": "7002b529658c1549228a4dbeebf58e634e41ba8309305ee5e47b0350a2ecfeb1",
|
||||
"fixtures": [
|
||||
"tests/files/web/modifier_grease_pencil_scene.blend"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json",
|
||||
"sha256": "ed20f7958b7242be8459c23985e022c83d791d4ff966360a3f29cad0f8d6e824",
|
||||
"fixtures": [
|
||||
"tests/files/web/modifier_reader_batch_five_scene.blend"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1152-001/modifier-reader-batch-production.json",
|
||||
"sha256": "6fc2e91cf28b8d8e3a54182df4552c67b963a824d8d99967ddfc622186d4fdbf",
|
||||
"fixtures": [
|
||||
"tests/files/web/generated/M16-GAP-00081-modifier-MESH_TO_VOLUME.blend",
|
||||
"tests/files/web/generated/M16-GAP-00087-modifier-PARTICLE_INSTANCE.blend",
|
||||
"tests/files/web/generated/M16-GAP-00098-modifier-SURFACE.blend",
|
||||
"tests/files/web/generated/M16-GAP-00103-modifier-VERTEX_WEIGHT_EDIT.blend",
|
||||
"tests/files/web/generated/M16-GAP-00104-modifier-VERTEX_WEIGHT_MIX.blend",
|
||||
"tests/files/web/generated/M16-GAP-00105-modifier-VERTEX_WEIGHT_PROXIMITY.blend"
|
||||
]
|
||||
}
|
||||
],
|
||||
"efficiency": {
|
||||
"existingChromiumReceiptsReused": 3,
|
||||
"browserRuns": 0,
|
||||
"buildRuns": 0,
|
||||
"policy": "verified-downstream-receipt-plus-source-dependency"
|
||||
}
|
||||
}
|
||||
182
tests/golden/WBV2-P1153-001/task-context.json
Normal file
182
tests/golden/WBV2-P1153-001/task-context.json
Normal file
@@ -0,0 +1,182 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P1153-001",
|
||||
"parentTask": "WBV2-P1153-000",
|
||||
"status": "in_progress",
|
||||
"goal": "以一个共享 Blender Main reader、WASM build、Worker 路由和 Chromium receipt 批量验证 MOD_grease_pencil_util, MOD_meshcache_mdd, MOD_meshcache_pc2, MOD_meshcache_util, MOD_weightvg_util 的真实 modifier/RNA 元数据。",
|
||||
"scope": {
|
||||
"gap": "capability:MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"ownerFamily": "MODIFIER",
|
||||
"implementationClass": "LOCAL_EXACT"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P1153-001 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2037,
|
||||
"contextRemainingTokens": 508
|
||||
},
|
||||
"source": {
|
||||
"bytes": 7867,
|
||||
"tokens": 1968
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/",
|
||||
"bytes": 10155,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc",
|
||||
"bytes": 521651,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
|
||||
"bytes": 313993,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tools/web/reuse-wbv2-source-dependencies.mjs",
|
||||
"bytes": 5428,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1153-001/module-receipt.json",
|
||||
"bytes": 7943,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1153-001/modifier-reader-batch-production.json",
|
||||
"bytes": null,
|
||||
"reason": "MISSING_PATH"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1153-001.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"source and protocol hashes are bound",
|
||||
"every selected Main reader type is proven",
|
||||
"negative no-mutation and recovery are proven",
|
||||
"Chromium and save/reopen evidence are exact"
|
||||
],
|
||||
"nextTask": null,
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P1153-001.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P1153-000/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P1153-000.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P1153-001.md",
|
||||
"tests/golden/WBV2-P1153-000/manifest.json",
|
||||
"docs/status/WBV2-P1153-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-P1153-000",
|
||||
"parentTask": "WBV2-P1152-001",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P1153-001",
|
||||
"artifactCount": 4
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P1153-000 status",
|
||||
"- task: `WBV2-P1153-000`; parent: `WBV2-P1152-001`; status: `done`",
|
||||
"- taskClass: `QUEUE_ENABLEMENT`; no modifier-family parity completion claimed",
|
||||
"- source-backed batch authorized: `MODIFIER_SOURCE_DEPENDENCY_REUSE` (5 units)",
|
||||
"- dynamic inventory: `3745` units; verified `454`; unverified `3291`; bound delta `0`",
|
||||
"- nextTask: `WBV2-P1153-001`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 2286,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 46,
|
||||
"taskTokens": 572
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 3830,
|
||||
"lines": 56,
|
||||
"tokens": 958
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P1153-001.md",
|
||||
"bytes": 2286,
|
||||
"lines": 46,
|
||||
"tokens": 572
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P1153-000/manifest.json",
|
||||
"bytes": 1387,
|
||||
"lines": 43,
|
||||
"tokens": 347
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P1153-000.md",
|
||||
"bytes": 364,
|
||||
"lines": 8,
|
||||
"tokens": 91
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1968,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1968,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2992,
|
||||
"serializedContextTokens": 674,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
@@ -6,10 +6,10 @@
|
||||
"dynamicInventory": {
|
||||
"path": "tests/golden/WBV2/dynamic-inventory.json",
|
||||
"beforeSha256": "02a76d4b766c5e921edc9a0b162f5be3ebc7218aee56dd63e31593817c231763",
|
||||
"afterSha256": "dc56239de97df983300670f142148c08780c5f8f3d35a41bb3144132726cfc9e",
|
||||
"afterSha256": "74a3c92aa14dfec9790eebc5825b2ccda6d5d0a01cf9445b9c9ec371e46a1cb9",
|
||||
"unitCount": 3745,
|
||||
"verifiedUnits": 454,
|
||||
"unverifiedUnits": 3291
|
||||
"verifiedUnits": 459,
|
||||
"unverifiedUnits": 3286
|
||||
},
|
||||
"explicitBindings": [
|
||||
{
|
||||
@@ -9091,12 +9091,112 @@
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_grease_pencil_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_mdd",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_pc2",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_weightvg_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
}
|
||||
],
|
||||
"coverageByKind": {
|
||||
"modifier-source": {
|
||||
"verified": 86,
|
||||
"unverified": 11
|
||||
"verified": 91,
|
||||
"unverified": 6
|
||||
},
|
||||
"node": {
|
||||
"verified": 21,
|
||||
@@ -9121,8 +9221,8 @@
|
||||
},
|
||||
"coverageByFamily": {
|
||||
"MODIFIER": {
|
||||
"verified": 86,
|
||||
"unverified": 11
|
||||
"verified": 91,
|
||||
"unverified": 6
|
||||
},
|
||||
"NODES": {
|
||||
"verified": 21,
|
||||
|
||||
@@ -9078,5 +9078,105 @@
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_grease_pencil_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_mdd",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_pc2",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_weightvg_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -5,19 +5,19 @@
|
||||
"artifacts": {
|
||||
"inventory": {
|
||||
"path": "tests/golden/WBV2/dynamic-inventory.json",
|
||||
"sha256": "dc56239de97df983300670f142148c08780c5f8f3d35a41bb3144132726cfc9e"
|
||||
"sha256": "74a3c92aa14dfec9790eebc5825b2ccda6d5d0a01cf9445b9c9ec371e46a1cb9"
|
||||
},
|
||||
"inventoryManifest": {
|
||||
"path": "tests/golden/WBV2/dynamic-inventory-manifest.json",
|
||||
"sha256": "265d0e0f09a0697b41859d698347beec3c55e350b4677e5ee71b223132d3df14"
|
||||
"sha256": "4778cc5b73b4eeeeceee778f1b556e2ac2df53234f08c6a316199c236eb94a92"
|
||||
},
|
||||
"bindings": {
|
||||
"path": "tests/golden/WBV2/dynamic-coverage-bindings.json",
|
||||
"sha256": "0bff89f65ae2191b734979e1f41a531ee4c0ee6378985751dd32c410b0d2193c"
|
||||
"sha256": "8f223744f229e97d9da7016b5f7340eb40d61cbf9965db85dc6d9e5c1ba9022a"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2/dynamic-coverage-audit.json",
|
||||
"sha256": "99d3eaaaf24efff35952db71a172b57ca14e0247058ed9adc2b24cd963f0b057"
|
||||
"sha256": "26618b2a7b99a00e46bb16fb2d8a05f59aed8a6897d9a044c64a8a437bc1614b"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/reconcile-source-dynamic-coverage.mjs",
|
||||
@@ -26,9 +26,9 @@
|
||||
},
|
||||
"coverage": {
|
||||
"unitCount": 3745,
|
||||
"verifiedUnits": 454,
|
||||
"unverifiedUnits": 3291,
|
||||
"boundUnitDelta": 12,
|
||||
"verifiedUnits": 459,
|
||||
"unverifiedUnits": 3286,
|
||||
"boundUnitDelta": 5,
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202"
|
||||
},
|
||||
"historical": {
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
},
|
||||
"planningEstimate": 5200,
|
||||
"hardTarget": false,
|
||||
"verifiedUnits": 454,
|
||||
"unverifiedUnits": 3291,
|
||||
"verifiedUnits": 459,
|
||||
"unverifiedUnits": 3286,
|
||||
"deterministic": true
|
||||
}
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
},
|
||||
"inventory": {
|
||||
"path": "tests/golden/WBV2/dynamic-inventory.json",
|
||||
"sha256": "dc56239de97df983300670f142148c08780c5f8f3d35a41bb3144132726cfc9e"
|
||||
"sha256": "74a3c92aa14dfec9790eebc5825b2ccda6d5d0a01cf9445b9c9ec371e46a1cb9"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2/dynamic-inventory-check-report.json",
|
||||
"sha256": "712a6e4d0832459feee34811cfc99775c7836ba3fe349e769c0344a3bc609ce3"
|
||||
"sha256": "ebe15b5f1b2121cb52b8495e67930b61d515a2a833f5ebb6918baba0e7bbb5c5"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-DYNAMIC-INVENTORY.md",
|
||||
@@ -47,9 +47,9 @@
|
||||
},
|
||||
"planningEstimate": 5200,
|
||||
"hardTarget": false,
|
||||
"verifiedUnits": 454,
|
||||
"unverifiedUnits": 3291,
|
||||
"boundCaseDelta": 12
|
||||
"verifiedUnits": 459,
|
||||
"unverifiedUnits": 3286,
|
||||
"boundCaseDelta": 5
|
||||
},
|
||||
"historical": {
|
||||
"initialEstimate": 6900,
|
||||
|
||||
@@ -77,8 +77,8 @@
|
||||
"estimateDelta": -1455
|
||||
},
|
||||
"coverage": {
|
||||
"verifiedUnits": 454,
|
||||
"unverifiedUnits": 3291,
|
||||
"verifiedUnits": 459,
|
||||
"unverifiedUnits": 3286,
|
||||
"sourceMappingRequired": 3745,
|
||||
"inventoryMutation": "explicit_source_case_bindings_only",
|
||||
"lastReconciledAt": "2026-09-01"
|
||||
@@ -38762,7 +38762,27 @@
|
||||
"evidence": "modifier-source-file"
|
||||
}
|
||||
],
|
||||
"coverageStatus": "UNVERIFIED"
|
||||
"coverageStatus": "VERIFIED",
|
||||
"coverage": {
|
||||
"unitId": "modifier-source:MOD_grease_pencil_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "modifier-source:MOD_grease_pencil_weight_angle",
|
||||
@@ -39116,7 +39136,27 @@
|
||||
"evidence": "modifier-source-file"
|
||||
}
|
||||
],
|
||||
"coverageStatus": "UNVERIFIED"
|
||||
"coverageStatus": "VERIFIED",
|
||||
"coverage": {
|
||||
"unitId": "modifier-source:MOD_meshcache_mdd",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "modifier-source:MOD_meshcache_pc2",
|
||||
@@ -39130,7 +39170,27 @@
|
||||
"evidence": "modifier-source-file"
|
||||
}
|
||||
],
|
||||
"coverageStatus": "UNVERIFIED"
|
||||
"coverageStatus": "VERIFIED",
|
||||
"coverage": {
|
||||
"unitId": "modifier-source:MOD_meshcache_pc2",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "modifier-source:MOD_meshcache_util",
|
||||
@@ -39144,7 +39204,27 @@
|
||||
"evidence": "modifier-source-file"
|
||||
}
|
||||
],
|
||||
"coverageStatus": "UNVERIFIED"
|
||||
"coverageStatus": "VERIFIED",
|
||||
"coverage": {
|
||||
"unitId": "modifier-source:MOD_meshcache_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "modifier-source:MOD_meshdeform",
|
||||
@@ -40228,7 +40308,27 @@
|
||||
"evidence": "modifier-source-file"
|
||||
}
|
||||
],
|
||||
"coverageStatus": "UNVERIFIED"
|
||||
"coverageStatus": "VERIFIED",
|
||||
"coverage": {
|
||||
"unitId": "modifier-source:MOD_weightvg_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "modifier-source:MOD_weightvgedit",
|
||||
@@ -108458,6 +108558,106 @@
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_grease_pencil_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_mdd",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_mdd.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_pc2",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_pc2.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_meshcache_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_meshcache_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
},
|
||||
{
|
||||
"unitId": "modifier-source:MOD_weightvg_util",
|
||||
"task": "WBV2-P1153-001",
|
||||
"capabilityId": "MODIFIER_SOURCE_DEPENDENCY_REUSE",
|
||||
"sourceLocation": {
|
||||
"path": "blender-5.2.0/source/blender/modifiers/intern/MOD_weightvg_util.cc",
|
||||
"line": 1,
|
||||
"evidence": "modifier-source-file"
|
||||
},
|
||||
"evidenceManifest": {
|
||||
"path": "tests/golden/WBV2-P1153-001/manifest.json",
|
||||
"sha256": "1b4d7065ccf363a3cec7d842e5c75635146cd4870c753f6d9e2a4be47ad3e6ac"
|
||||
},
|
||||
"productionEvidence": {
|
||||
"path": "tests/golden/WBV2-P1153-001/source-dependency-reuse-production.json",
|
||||
"sha256": "de4dace6b06a305b11e9ee65c6e787c0b0304b1303b503c4fcdfe6c37f41dabf"
|
||||
},
|
||||
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
|
||||
"status": "VERIFIED"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -16,15 +16,13 @@ const arg = (name, fallback = null) => {
|
||||
const task = arg("--task");
|
||||
if (!task) throw new Error("usage: node tools/web/bind-wbv2-module-coverage.mjs --task <task-id>");
|
||||
const manifestPath = `tests/golden/${task}/manifest.json`;
|
||||
const productionPath = arg("--production", `tests/golden/${task}/modifier-reader-batch-production.json`);
|
||||
const manifest = json(manifestPath);
|
||||
assert.equal(manifest.status, "done");
|
||||
const moduleRecord = Object.values(json("tests/golden/WBV2-P1100-000/module-execution-plan.json").tasks ?? {})
|
||||
.find((candidate) => candidate.id === task);
|
||||
const planPath = manifest.artifacts.plan.path;
|
||||
const plan = json(planPath);
|
||||
const taskRecord = plan.tasks.find((candidate) => candidate.id === task);
|
||||
const module = taskRecord?.module;
|
||||
const productionPath = arg("--production", module?.evidencePaths?.[0] ?? `tests/golden/${task}/modifier-reader-batch-production.json`);
|
||||
const requestedUnits = (arg("--units") ?? "").split(",").map((value) => value.trim()).filter(Boolean);
|
||||
const coverageBindings = requestedUnits.length > 0 ? requestedUnits : module?.coverageBindings ?? [];
|
||||
const capabilityId = module?.moduleId ?? arg("--capability", task);
|
||||
@@ -35,21 +33,38 @@ assert.equal(production.queueMutation, false);
|
||||
const inventoryPath = "tests/golden/WBV2/dynamic-inventory.json";
|
||||
const inventory = json(inventoryPath);
|
||||
const fixturePaths = Array.isArray(production.fixtures) ? production.fixtures : production.fixture ? [production.fixture] : [];
|
||||
assert.ok(fixturePaths.length, "production evidence has no fixture(s)");
|
||||
const fixtureEvidence = Array.isArray(production.fixtures)
|
||||
? fixturePaths.map((fixture) => production[fixture])
|
||||
: [production];
|
||||
for (const evidence of fixtureEvidence) {
|
||||
assert.ok(evidence && typeof evidence === "object", "fixture result is missing");
|
||||
assert.equal(evidence.error, undefined);
|
||||
assert.equal(evidence.saveReopenExact, true);
|
||||
assert.equal(evidence.deterministicExact, true);
|
||||
}
|
||||
if (Array.isArray(production.fixtures)) {
|
||||
assert.equal(typeof production.fixtureSha256, "object");
|
||||
for (const fixture of fixturePaths) assert.equal(production.fixtureSha256[fixture], sha(fixture), `fixture hash drift: ${fixture}`);
|
||||
const validateEvidence = (evidencePath) => {
|
||||
const evidence = json(evidencePath);
|
||||
assert.equal(evidence.browser, "chromium");
|
||||
assert.equal(evidence.queueMutation, false);
|
||||
const paths = Array.isArray(evidence.fixtures) ? evidence.fixtures : evidence.fixture ? [evidence.fixture] : [];
|
||||
assert.ok(paths.length, `production evidence has no fixture(s): ${evidencePath}`);
|
||||
const entries = Array.isArray(evidence.fixtures) ? paths.map((fixture) => evidence[fixture]) : [evidence];
|
||||
for (const entry of entries) {
|
||||
assert.ok(entry && typeof entry === "object", "fixture result is missing");
|
||||
assert.equal(entry.error, undefined);
|
||||
if (entry.saveReopenExact !== undefined) assert.equal(entry.saveReopenExact, true);
|
||||
if (entry.deterministicExact !== undefined) assert.equal(entry.deterministicExact, true);
|
||||
if (entry.exact !== undefined) assert.equal(entry.exact, true);
|
||||
}
|
||||
if (Array.isArray(evidence.fixtures)) {
|
||||
assert.equal(typeof evidence.fixtureSha256, "object");
|
||||
for (const fixture of paths) assert.equal(evidence.fixtureSha256[fixture], sha(fixture), `fixture hash drift: ${fixture}`);
|
||||
} else {
|
||||
assert.equal(evidence.fixtureSha256, sha(evidence.fixture));
|
||||
}
|
||||
return evidence;
|
||||
};
|
||||
if (production.reusedEvidence?.length) {
|
||||
assert.ok(production.dependencyProofs?.length, "dependency reuse evidence has no proofs");
|
||||
for (const evidence of production.reusedEvidence) {
|
||||
assert.ok(evidence.path, "reused evidence path is missing");
|
||||
validateEvidence(evidence.path);
|
||||
assert.equal(evidence.sha256, sha(evidence.path), `reused evidence hash drift: ${evidence.path}`);
|
||||
}
|
||||
} else {
|
||||
assert.equal(production.fixtureSha256, sha(production.fixture));
|
||||
assert.ok(fixturePaths.length, "production evidence has no fixture(s)");
|
||||
validateEvidence(productionPath);
|
||||
}
|
||||
const bindingsPath = "tests/golden/WBV2/dynamic-coverage-bindings.json";
|
||||
const existing = fs.existsSync(abs(bindingsPath)) ? json(bindingsPath) : [];
|
||||
|
||||
95
tools/web/reuse-wbv2-source-dependencies.mjs
Normal file
95
tools/web/reuse-wbv2-source-dependencies.mjs
Normal file
@@ -0,0 +1,95 @@
|
||||
import assert from "node:assert/strict";
|
||||
import crypto from "node:crypto";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
|
||||
const abs = (file) => path.join(root, file);
|
||||
const read = (file) => fs.readFileSync(abs(file), "utf8");
|
||||
const json = (file) => JSON.parse(read(file));
|
||||
const sha = (file) => crypto.createHash("sha256").update(fs.readFileSync(abs(file))).digest("hex");
|
||||
const arg = (name) => {
|
||||
const index = process.argv.indexOf(name);
|
||||
return index >= 0 ? process.argv[index + 1] : null;
|
||||
};
|
||||
const task = arg("--task");
|
||||
if (!task || !process.argv.includes("--write")) throw new Error("usage: node tools/web/reuse-wbv2-source-dependencies.mjs --task <task-id> --write");
|
||||
|
||||
const inventoryPath = "tests/golden/WBV2/dynamic-inventory.json";
|
||||
const inventory = json(inventoryPath);
|
||||
const index = json("tests/golden/WBV2/task-index.json");
|
||||
const plan = json(index.source.path);
|
||||
const record = plan.tasks.find((candidate) => candidate.id === task);
|
||||
const module = record?.module;
|
||||
assert.ok(module?.dependencyReuse?.length, `task ${task} has no dependency reuse map`);
|
||||
const bindings = json("tests/golden/WBV2/dynamic-coverage-bindings.json");
|
||||
const bindingByUnit = new Map(bindings.filter((binding) => binding.status === "VERIFIED").map((binding) => [binding.unitId, binding]));
|
||||
|
||||
function validateEvidence(evidencePath) {
|
||||
const evidence = json(evidencePath);
|
||||
assert.equal(evidence.browser, "chromium", `evidence is not Chromium: ${evidencePath}`);
|
||||
assert.equal(evidence.queueMutation, false, `evidence mutated queue: ${evidencePath}`);
|
||||
const fixturePaths = Array.isArray(evidence.fixtures) ? evidence.fixtures : evidence.fixture ? [evidence.fixture] : [];
|
||||
assert.ok(fixturePaths.length, `evidence has no fixture(s): ${evidencePath}`);
|
||||
const entries = Array.isArray(evidence.fixtures) ? fixturePaths.map((fixture) => evidence[fixture]) : [evidence];
|
||||
for (const entry of entries) {
|
||||
assert.ok(entry && entry.error === undefined, `evidence fixture failed: ${evidencePath}`);
|
||||
if (entry.saveReopenExact !== undefined) assert.equal(entry.saveReopenExact, true);
|
||||
if (entry.deterministicExact !== undefined) assert.equal(entry.deterministicExact, true);
|
||||
if (entry.exact !== undefined) assert.equal(entry.exact, true);
|
||||
}
|
||||
if (Array.isArray(evidence.fixtures)) {
|
||||
for (const fixture of fixturePaths) assert.equal(evidence.fixtureSha256?.[fixture], sha(fixture), `fixture hash drift: ${fixture}`);
|
||||
} else {
|
||||
assert.equal(evidence.fixtureSha256, sha(evidence.fixture), `fixture hash drift: ${evidence.fixture}`);
|
||||
}
|
||||
return { path: evidencePath, sha256: sha(evidencePath), fixtures: fixturePaths };
|
||||
}
|
||||
|
||||
const proofs = [];
|
||||
const reusedEvidence = new Map();
|
||||
for (const dependency of module.dependencyReuse) {
|
||||
const unit = inventory.units.find((candidate) => candidate.id === dependency.unitId);
|
||||
assert.ok(unit, `dynamic unit missing: ${dependency.unitId}`);
|
||||
assert.equal(unit.coverageStatus, "UNVERIFIED", `dependency unit is already verified: ${dependency.unitId}`);
|
||||
const representative = bindingByUnit.get(dependency.representativeUnitId);
|
||||
assert.ok(representative, `verified representative binding missing: ${dependency.representativeUnitId}`);
|
||||
assert.equal(representative.sourceTreeSha256, inventory.authority.sourceTreeSha256);
|
||||
assert.ok(fs.existsSync(abs(dependency.proofSource)), `dependency proof source missing: ${dependency.proofSource}`);
|
||||
const proofText = read(dependency.proofSource);
|
||||
assert.ok(proofText.includes(dependency.marker), `dependency marker missing: ${dependency.marker}`);
|
||||
assert.ok(fs.existsSync(abs(unit.locations?.[0]?.path)), `dependency source missing: ${unit.locations?.[0]?.path}`);
|
||||
assert.ok(read(unit.locations[0].path).includes(dependency.marker), `dependency source marker missing: ${dependency.marker}`);
|
||||
const evidence = validateEvidence(dependency.productionEvidence);
|
||||
reusedEvidence.set(evidence.path, evidence);
|
||||
proofs.push({
|
||||
unitId: dependency.unitId,
|
||||
sourceLocation: unit.locations?.[0],
|
||||
representativeUnitId: dependency.representativeUnitId,
|
||||
representativeBinding: { task: representative.task, productionEvidence: representative.productionEvidence },
|
||||
proofSource: dependency.proofSource,
|
||||
proofSourceSha256: sha(dependency.proofSource),
|
||||
marker: dependency.marker,
|
||||
productionEvidence: evidence,
|
||||
sourceTreeSha256: inventory.authority.sourceTreeSha256,
|
||||
});
|
||||
}
|
||||
|
||||
const reportPath = module.evidencePaths?.[0] ?? `tests/golden/${task}/source-dependency-reuse-production.json`;
|
||||
const report = {
|
||||
schemaVersion: 1,
|
||||
task,
|
||||
operation: "SOURCE_DEPENDENCY_REUSE_CHROMIUM_RECEIPT",
|
||||
status: "PASS",
|
||||
browser: "chromium",
|
||||
queueMutation: false,
|
||||
sourceUnits: module.coverageBindings,
|
||||
sourceTreeSha256: inventory.authority.sourceTreeSha256,
|
||||
dependencyProofs: proofs,
|
||||
reusedEvidence: [...reusedEvidence.values()],
|
||||
efficiency: { existingChromiumReceiptsReused: reusedEvidence.size, browserRuns: 0, buildRuns: 0, policy: "verified-downstream-receipt-plus-source-dependency" },
|
||||
};
|
||||
fs.mkdirSync(path.dirname(abs(reportPath)), { recursive: true });
|
||||
fs.writeFileSync(abs(reportPath), `${JSON.stringify(report, null, 2)}\n`);
|
||||
process.stdout.write(`wbv2-source-dependency-reuse-ok task=${task} units=${proofs.length} receipts=${reusedEvidence.size} browserRuns=0\n`);
|
||||
@@ -63,6 +63,30 @@ const reusableProductionEvidence = () => {
|
||||
catch { return null; }
|
||||
if (evidence.task !== task || evidence.browser !== "chromium" || evidence.queueMutation !== false
|
||||
|| evidence.error !== undefined) return null;
|
||||
if (evidence.reusedEvidence?.length && evidence.dependencyProofs?.length) {
|
||||
for (const reused of evidence.reusedEvidence) {
|
||||
if (!reused.path || !fs.existsSync(abs(reused.path))) return null;
|
||||
let prior;
|
||||
try { prior = json(reused.path); }
|
||||
catch { return null; }
|
||||
const paths = Array.isArray(prior.fixtures) ? prior.fixtures : prior.fixture ? [prior.fixture] : [];
|
||||
const entries = Array.isArray(prior.fixtures) ? paths.map((fixture) => prior[fixture]) : [prior];
|
||||
if (!paths.length || entries.some((entry) => !entry || entry.error !== undefined
|
||||
|| (entry.saveReopenExact !== undefined && entry.saveReopenExact !== true)
|
||||
|| (entry.deterministicExact !== undefined && entry.deterministicExact !== true)
|
||||
|| (entry.exact !== undefined && entry.exact !== true))) return null;
|
||||
if (Array.isArray(prior.fixtures)) {
|
||||
if (paths.some((fixture) => !fs.existsSync(abs(fixture)) || prior.fixtureSha256?.[fixture] !== sha(fixture))) return null;
|
||||
} else if (!fs.existsSync(abs(prior.fixture)) || prior.fixtureSha256 !== sha(prior.fixture)) return null;
|
||||
}
|
||||
if (!fs.existsSync(abs(reportPath))) return null;
|
||||
let previousReceipt;
|
||||
try { previousReceipt = json(reportPath); }
|
||||
catch { return null; }
|
||||
if (previousReceipt.status !== "PASS" || previousReceipt.source?.unchanged !== true) return null;
|
||||
if (JSON.stringify(previousReceipt.source?.after ?? {}) !== JSON.stringify(sourceBefore)) return null;
|
||||
return { evidencePath, evidence };
|
||||
}
|
||||
const fixturePaths = Array.isArray(evidence.fixtures) ? evidence.fixtures : evidence.fixture ? [evidence.fixture] : [];
|
||||
if (!fixturePaths.length) return null;
|
||||
const fixtureEvidence = Array.isArray(evidence.fixtures) ? fixturePaths.map((fixture) => evidence[fixture]) : [evidence];
|
||||
|
||||
Reference in New Issue
Block a user