feat(web): optimize source coverage batching
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-09-03 12:43:45 +08:00
parent 0c74adf96c
commit 814b290c29
49 changed files with 5916 additions and 116 deletions

View File

@@ -5,4 +5,4 @@
- positive Main mutation, negative no-mutation, recovery and Chromium gates are recorded in the module receipt
- dynamic source inventory: `3745` units; verified `377`; unverified `3368`; this-segment binding delta: `8`; planning estimate `5200` (non-binding)
- historical 6900-entry inventory remains read-only; full-family parity: `false`
- nextTask: `NONE`
- nextTask: `WBV2-P1149-000`

View File

@@ -0,0 +1,7 @@
# WBV2-P1149-000 status
- task: `WBV2-P1149-000`; parent: `WBV2-P1148-001`; status: `done`
- taskClass: `QUEUE_ENABLEMENT`; no modifier-family parity completion claimed
- source-backed batch authorized: `MODIFIER_READER_BATCH_FOUR` (8 units)
- dynamic inventory: `3745` units; verified `377`; unverified `3368`; bound delta `0`
- nextTask: `WBV2-P1149-001`

View File

@@ -3,6 +3,6 @@
- task: `WBV2-P1149-001`; module: `MODIFIER_READER_BATCH_FOUR`; status: `done`
- source hashes stable: `true`; commands passed: `4`
- positive Main mutation, negative no-mutation, recovery and Chromium gates are recorded in the module receipt
- dynamic source inventory: `3745` units; verified `377`; unverified `3368`; planning estimate `5200` (non-binding)
- dynamic source inventory: `3745` units; verified `385`; unverified `3360`; planning estimate `5200` (non-binding); this-segment binding delta: `8`
- historical 6900-entry inventory remains read-only; full-family parity: `false`
- nextTask: `NONE`
- nextTask: `WBV2-P1150-000`

View File

@@ -0,0 +1,7 @@
# WBV2-P1150-000 status
- task: `WBV2-P1150-000`; parent: `WBV2-P1149-001`; status: `done`
- taskClass: `QUEUE_ENABLEMENT`; no modifier-family parity completion claimed
- source-backed batch authorized: `MODIFIER_READER_BATCH_FIVE` (8 units)
- dynamic inventory: `3745` units; verified `385`; unverified `3360`; bound delta `0`
- nextTask: `WBV2-P1150-001`

View File

@@ -5,4 +5,4 @@
- positive Main mutation, negative no-mutation, recovery and Chromium gates are recorded in the module receipt
- dynamic source inventory: `3745` units; verified `393`; unverified `3352`; planning estimate `5200` (non-binding); this-segment binding delta: `8`
- historical 6900-entry inventory remains read-only; full-family parity: `false`
- nextTask: `NONE`
- nextTask: `WBV2-P1151-000`

View File

@@ -0,0 +1,7 @@
# WBV2-P1151-000 status
- task: `WBV2-P1151-000`; parent: `WBV2-P1150-001`; status: `done`
- taskClass: `QUEUE_ENABLEMENT`; no modifier-family parity completion claimed
- source-backed batch authorized: `GREASE_PENCIL_MODIFIER_READER_BATCH` (48 units)
- dynamic inventory: `3745` units; verified `393`; unverified `3352`; bound delta `0`
- nextTask: `WBV2-P1151-001`

View File

@@ -3,6 +3,6 @@
- task: `WBV2-P1151-001`; module: `GREASE_PENCIL_MODIFIER_READER_BATCH`; status: `done`
- source hashes stable: `true`; commands passed: `4`
- positive Main mutation, negative no-mutation, recovery and Chromium gates are recorded in the module receipt
- dynamic source inventory: `3745` units; verified `441`; unverified `3304`; planning estimate `5200` (non-binding); this-segment binding delta: `48`
- 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`

View File

@@ -0,0 +1,45 @@
# WBV2-P1149-000: verify modifier reader batch four
- task: WBV2-P1149-000
- parent: WBV2-P1148-001
- status: done
- gap: capability:MODIFIER_READER_BATCH_FOUR
- ownerFamily: MODIFIER
- targetImplementationClass: LOCAL_EXACT
- Implementation entrypoint: `python3 my-tools/authorize_next_wbv2_task.py --write`
## 目标
以一个共享 Blender Main reader、WASM build、Worker 路由和 Chromium receipt 批量验证 MOD_uvproject, MOD_uvwarp, MOD_volume_displace, MOD_volume_to_mesh 的真实 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`
- Fixture: `tests/files/web/modifier_reader_batch_four_scene.blend`
- Chromium test: `web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts`
- Selected modifier units: `modifier-source:MOD_uvproject`, `modifier-source:MOD_uvwarp`, `modifier-source:MOD_volume_displace`, `modifier-source:MOD_volume_to_mesh`
- Selected RNA units: `rna-struct:UVProjectModifier`, `rna-struct:UVWarpModifier`, `rna-struct:VolumeDisplaceModifier`, `rna-struct:VolumeToMeshModifier`
## 验收
- 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-P1149-000 --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-P1149-000/module-receipt.json`
- Aggregate production evidence: `tests/golden/WBV2-P1149-000/modifier-reader-batch-production.json`
- Manifest: `tests/golden/WBV2-P1149-000/manifest.json`
- Status: `docs/status/WBV2-P1149-000.md`
- Rollback: restore WBV2-P1148-001 as queue parent without rewriting prior evidence.

View File

@@ -0,0 +1,45 @@
# WBV2-P1150-000: verify modifier reader batch five
- task: WBV2-P1150-000
- parent: WBV2-P1149-001
- status: done
- gap: capability:MODIFIER_READER_BATCH_FIVE
- ownerFamily: MODIFIER
- targetImplementationClass: LOCAL_EXACT
- Implementation entrypoint: `python3 my-tools/authorize_next_wbv2_task.py --write`
## 目标
以一个共享 Blender Main reader、WASM build、Worker 路由和 Chromium receipt 批量验证 MOD_meshcache, MOD_meshsequencecache, MOD_multires, MOD_ocean 的真实 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`
- Fixture: `tests/files/web/modifier_reader_batch_five_scene.blend`
- Chromium test: `web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts`
- Selected modifier units: `modifier-source:MOD_meshcache`, `modifier-source:MOD_meshsequencecache`, `modifier-source:MOD_multires`, `modifier-source:MOD_ocean`
- Selected RNA units: `rna-struct:MeshCacheModifier`, `rna-struct:MeshSequenceCacheModifier`, `rna-struct:MultiresModifier`, `rna-struct:OceanModifier`
## 验收
- 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-P1150-000 --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-P1150-000/module-receipt.json`
- Aggregate production evidence: `tests/golden/WBV2-P1150-000/modifier-reader-batch-production.json`
- Manifest: `tests/golden/WBV2-P1150-000/manifest.json`
- Status: `docs/status/WBV2-P1150-000.md`
- Rollback: restore WBV2-P1149-001 as queue parent without rewriting prior evidence.

View File

@@ -0,0 +1,31 @@
# WBV2-P1151-000: authorize module batch
- task: WBV2-P1151-000
- parent: WBV2-P1150-001
- status: done
- gap: capability:GREASE_PENCIL_MODIFIER_READER_BATCH
- ownerFamily: DRAWING
- targetImplementationClass: QUEUE_ONLY
- Implementation entrypoint: `python3 my-tools/authorize_next_wbv2_task.py --write`
## 目标
授权一个共享 Blender Main/WASM/Chromium 功能批次:GREASE_PENCIL_MODIFIER_READER_BATCH,共 48 个源码/RNA 单元。
## 输入与范围
- Blender source: `blender-5.2.0/source/blender`
- Fixture/test: `tests/files/web/modifier_grease_pencil_scene.blend`, `web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts`
## 验收
- 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-P1151-000 --write`
## 交付与回滚
- Manifest: `tests/golden/WBV2-P1151-000/manifest.json`
- Status: `docs/status/WBV2-P1151-000.md`
- Rollback: restore WBV2-P1150-001 as queue parent.

View File

@@ -53,6 +53,66 @@ PREFERRED_BATCHES = [
"production": "tests/golden/{task}/modifier-reader-batch-production.json",
"types": ["REMESH", "SKIN", "WEIGHTED_NORMAL", "WARP"],
},
{
"moduleId": "MODIFIER_READER_BATCH_FOUR",
"title": "verify modifier reader batch four",
"owner": "MODIFIER",
"identifiers": ["MOD_uvproject", "MOD_uvwarp", "MOD_normal_edit", "MOD_volume_to_mesh"],
"rna": ["UVProjectModifier", "UVWarpModifier", "NormalEditModifier", "VolumeToMeshModifier"],
"fixture": "tests/files/web/modifier_reader_batch_four_scene.blend",
"test": "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts",
"production": "tests/golden/{task}/modifier-reader-batch-production.json",
"types": ["UV_PROJECT", "UV_WARP", "NORMAL_EDIT", "VOLUME_TO_MESH"],
},
{
"moduleId": "MODIFIER_READER_BATCH_FIVE",
"title": "verify modifier reader batch five",
"owner": "MODIFIER",
"identifiers": ["MOD_meshcache", "MOD_meshsequencecache", "MOD_multires", "MOD_ocean"],
"rna": ["MeshCacheModifier", "MeshSequenceCacheModifier", "MultiresModifier", "OceanModifier"],
"fixture": "tests/files/web/modifier_reader_batch_five_scene.blend",
"test": "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts",
"production": "tests/golden/{task}/modifier-reader-batch-production.json",
"types": ["MESH_CACHE", "MESH_SEQUENCE_CACHE", "MULTIRES", "OCEAN"],
},
{
"moduleId": "GREASE_PENCIL_MODIFIER_READER_BATCH",
"title": "verify Grease Pencil modifier reader batch",
"owner": "DRAWING",
"identifiers": [
"MOD_grease_pencil_armature", "MOD_grease_pencil_array", "MOD_grease_pencil_build",
"MOD_grease_pencil_color", "MOD_grease_pencil_dash", "MOD_grease_pencil_envelope",
"MOD_grease_pencil_hook", "MOD_grease_pencil_lattice", "MOD_grease_pencil_length",
"MOD_grease_pencil_mirror", "MOD_grease_pencil_multiply", "MOD_grease_pencil_noise",
"MOD_grease_pencil_offset", "MOD_grease_pencil_opacity", "MOD_grease_pencil_outline",
"MOD_grease_pencil_shrinkwrap", "MOD_grease_pencil_simplify", "MOD_grease_pencil_smooth",
"MOD_grease_pencil_subdiv", "MOD_grease_pencil_texture", "MOD_grease_pencil_thickness",
"MOD_grease_pencil_time", "MOD_grease_pencil_tint", "MOD_grease_pencil_weight_angle",
"MOD_grease_pencil_weight_proximity",
],
"rna": [
"GreasePencilArmatureModifier", "GreasePencilArrayModifier", "GreasePencilBuildModifier",
"GreasePencilColorModifier", "GreasePencilEnvelopeModifier", "GreasePencilHookModifier",
"GreasePencilLatticeModifier", "GreasePencilLengthModifier", "GreasePencilMirrorModifier",
"GreasePencilMultiplyModifier", "GreasePencilNoiseModifier", "GreasePencilOffsetModifier",
"GreasePencilOpacityModifier", "GreasePencilOutlineModifier", "GreasePencilShrinkwrapModifier",
"GreasePencilSimplifyModifier", "GreasePencilSmoothModifier", "GreasePencilSubdivModifier",
"GreasePencilTextureModifier", "GreasePencilTimeModifier", "GreasePencilTintModifier",
"GreasePencilWeightAngleModifier", "GreasePencilWeightProximityModifier",
],
"fixture": "tests/files/web/modifier_grease_pencil_scene.blend",
"test": "web/tests/e2e/wbv2-modifier-reader-batch-two-production.spec.ts",
"production": "tests/golden/{task}/modifier-reader-batch-production.json",
"types": [
"GREASE_PENCIL_ARMATURE", "GREASE_PENCIL_ARRAY", "GREASE_PENCIL_BUILD", "GREASE_PENCIL_COLOR",
"GREASE_PENCIL_DASH", "GREASE_PENCIL_ENVELOPE", "GREASE_PENCIL_HOOK", "GREASE_PENCIL_LATTICE",
"GREASE_PENCIL_LENGTH", "GREASE_PENCIL_MIRROR", "GREASE_PENCIL_MULTIPLY", "GREASE_PENCIL_NOISE",
"GREASE_PENCIL_OFFSET", "GREASE_PENCIL_OPACITY", "GREASE_PENCIL_OUTLINE", "GREASE_PENCIL_SHRINKWRAP",
"GREASE_PENCIL_SIMPLIFY", "GREASE_PENCIL_SMOOTH", "GREASE_PENCIL_SUBDIV", "GREASE_PENCIL_TEXTURE",
"GREASE_PENCIL_THICKNESS", "GREASE_PENCIL_TIME", "GREASE_PENCIL_TINT", "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE",
"GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY",
],
},
]
@@ -113,6 +173,80 @@ 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:
if task.endswith("-000"):
return f"""# {task}: authorize module batch
- task: {task}
- parent: {parent}
- status: {status}
- gap: capability:{batch['moduleId']}
- ownerFamily: {batch['owner']}
- targetImplementationClass: QUEUE_ONLY
- Implementation entrypoint: `{entrypoint}`
## 目标
授权一个共享 Blender Main/WASM/Chromium 功能批次:{batch['moduleId']},共 {len(batch['identifiers']) + len(batch['rna'])} 个源码/RNA 单元。
## 输入与范围
- Blender source: `blender-5.2.0/source/blender`
- Fixture/test: `{batch['fixture']}`, `{batch['test']}`
## 验收
- 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 {task} --write`
## 交付与回滚
- Manifest: `tests/golden/{task}/manifest.json`
- Status: `docs/status/{task}.md`
- Rollback: restore {parent} as queue parent.
"""
if len(batch["identifiers"]) + len(batch["rna"]) > 16:
return f"""# {task}: {batch['title']}
- task: {task}
- parent: {parent}
- status: {status}
- gap: capability:{batch['moduleId']}
- ownerFamily: {batch['owner']}
- targetImplementationClass: LOCAL_EXACT
- Implementation entrypoint: `{entrypoint}`
## 目标
使用一个共享 Blender Main/WASM/Worker/Chromium 链验证 {len(batch['identifiers'])} 个 modifier source 与 {len(batch['rna'])} 个 RNA unit,形成一个聚合 receipt。
## 输入与范围
- Blender source family: `blender-5.2.0/source/blender`
- Fixture: `{batch['fixture']}`
- Chromium test: `{batch['test']}`
- Unit selection: `{len(batch['identifiers']) + len(batch['rna'])} units`(完整列表只在 module plan/manifest)
## 验收
- one shared function chain covers every selected unit exactly once
- malformed input, unsupported data and hash drift fail closed without Main mutation
- save/reopen, deterministic second read and Chromium evidence are exact
- `node tools/web/check-task-context.mjs --task {task} --write`
## 失败边界
- partial batch success never advances or claims omitted units
- existing source/receipt hashes are reused; historical inventory remains read-only
## 交付与回滚
- Aggregate receipt: `tests/golden/{task}/module-receipt.json`
- Production evidence: `tests/golden/{task}/modifier-reader-batch-production.json`
- Manifest: `tests/golden/{task}/manifest.json`
- Rollback: restore {parent} as queue parent.
"""
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"])

View File

@@ -67,7 +67,7 @@
},
"status": {
"path": "docs/status/WBV2-P1148-001.md",
"sha256": "bbfd0890471b04498c501960087fb99b4547638115548a0d00af8ed577be546d"
"sha256": "563f94e962ccba81976b2a9b1a09397745ed080701e6f37551d0f8169a614f52"
},
"log": {
"path": "tests/golden/WBV2-P1148-001/module-run.log",
@@ -107,5 +107,5 @@
"historicalEffectivePending": 6609,
"historicalReproduction": false
},
"nextTask": null
"nextTask": "WBV2-P1149-000"
}

View File

@@ -0,0 +1,36 @@
{
"schemaVersion": 1,
"task": "WBV2-P1149-000",
"operation": "AUTHORIZE_SOURCE_BACKED_MODULE_BATCH",
"taskClass": "QUEUE_ENABLEMENT",
"status": "PASS",
"parent": {
"task": "WBV2-P1148-001",
"manifest": "tests/golden/WBV2-P1148-001/manifest.json",
"manifestSha256": "3602227697c22e05550370215e38b30cdcc4e9fd27a2f8a1fe8842f85cdbed69"
},
"module": {
"moduleId": "MODIFIER_READER_BATCH_FOUR",
"task": "WBV2-P1149-001",
"batchSize": 8,
"sourceUnits": [
"modifier-source:MOD_uvproject",
"modifier-source:MOD_uvwarp",
"modifier-source:MOD_volume_displace",
"modifier-source:MOD_volume_to_mesh",
"rna-struct:UVProjectModifier",
"rna-struct:UVWarpModifier",
"rna-struct:VolumeDisplaceModifier",
"rna-struct:VolumeToMeshModifier"
],
"sourceBacked": true
},
"inventory": {
"unitCount": 3745,
"verifiedUnits": 377,
"unverifiedUnits": 3368,
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
"boundUnitDelta": 0
},
"nextTask": "WBV2-P1149-001"
}

View File

@@ -0,0 +1,12 @@
[main 3c9ac9992] chore(web): continuous handoff WBV2-P1149-001
14 files changed, 6966 insertions(+), 9 deletions(-)
create mode 100644 docs/status/WBV2-P1149-001.md
create mode 100644 docs/tasks/WBV2-P1149-001.md
create mode 100644 tests/files/web/modifier_reader_batch_four_scene.blend
create mode 100644 tests/golden/WBV2-P1149-000/manifest.json
create mode 100644 tests/golden/WBV2-P1149-000/module-execution-plan.json
create mode 100644 tests/golden/WBV2-P1149-001/manifest.json
create mode 100644 tests/golden/WBV2-P1149-001/modifier-reader-batch-production.json
create mode 100644 tests/golden/WBV2-P1149-001/module-receipt.json
create mode 100644 tests/golden/WBV2-P1149-001/module-run.log
create mode 100644 tests/golden/WBV2-P1149-001/task-context.json

View File

@@ -0,0 +1,12 @@
context-governance-ok task=WBV2-P1149-001 contentTokens=1973 envelopeTokens=658/1024 estimatedTokens=2997/3500 inputs=0 commands=1
{"schemaVersion":1,"operation":"BLENDER_WEB_EXECUTION_CONTROL_PLANE","status":"PASS","authority":{"executionPointer":"docs/EXECUTION_QUEUE.md","productCapabilities":"docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json","legacyCoverage":"tests/golden/M15-03A/next-task-plan.json","historicalEvidence":"tests/golden/corrective/"},"queue":{"currentTask":"WBV2-P1149-001","parentManifest":"tests/golden/WBV2-P1149-000/manifest.json","parentTask":"WBV2-P1149-000","parentNextTask":"WBV2-P1149-001","activeCatalogTask":null,"legacyCoverageTask":"M16-GAP-00282","legacyCoverageParentManifest":"tests/golden/M16-GAP-00281/manifest.json","legacyCoverageState":"active","runnableInputs":null},"efficiency":{"legacyGapTasks":6900,"legacyCompleted":281,"legacyPending":6618,"capabilityClusters":3,"mappedLegacyGaps":9,"averageGapsPerCapability":3,"productiveLane":0,"rule":"one capability task may close multiple legacy cases; legacy cases remain regression coverage"},"dynamicInventory":{"path":"tests/golden/WBV2/dynamic-inventory.json","manifestPath":"tests/golden/WBV2/dynamic-inventory-manifest.json","sourceTreeSha256":"600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202","sourceFiles":6206,"unitCount":3745,"planningEstimate":5200,"hardTarget":false,"verifiedUnits":385,"unverifiedUnits":3360},"capabilityClusters":{"ASSET_CATALOG":{"capabilityId":"CAP-ASSET-CATALOG-MUTATION","sourceGaps":5,"parityLevel":"L0","targetParityLevel":"L4","lifecycleStatus":"planned"},"MODIFIER":{"capabilityId":"CAP-MODIFIER-STATE-MUTATION","sourceGaps":2,"parityLevel":"L0","targetParityLevel":"L3","lifecycleStatus":"planned"},"MESH":{"capabilityId":"CAP-MESH-POSITIVE-EDIT","sourceGaps":2,"parityLevel":"L0","targetParityLevel":"L3","lifecycleStatus":"planned"}},"issues":[],"remediation":[],"allowUnrunnable":true,"inputDigest":"5a71eda030919a06046dfa569b0af2ec9fbc8247e6e2d477d64c3981e61321cc"}
v2-task-index-ok tasks=79 active=NONE catalog=tests/golden/WBV2/task-catalog.jsonl
v2-handoff-ok task=WBV2-P1149-001 parent=WBV2-P1149-000 status=done artifacts=19
> blender-web-editor@0.1.0-rc.1 typecheck
> tsc -p tsconfig.json --noEmit
> blender-web-editor@0.1.0-rc.1 lint
> eslint app

View File

@@ -0,0 +1 @@
local_head=3c9ac9992586f4ea99f1e04ac21e7aed0fb4a0f8 remote_head=3c9ac9992586f4ea99f1e04ac21e7aed0fb4a0f8

View File

@@ -0,0 +1,4 @@
remote: . Processing 1 references
remote: Processed 1 references in total
To https://gitea.meswork.com/wangdequan/workinf_Blender_Wasm.git
61b27cdeb..3c9ac9992 main -> main

View File

@@ -0,0 +1,4 @@
v2-task-index-generated tasks=79 active=NONE output=tests/golden/WBV2/task-index.json
task-context-ok task=WBV2-P1149-001 parent=WBV2-P1149-000 contentTokens=1973 envelopeTokens=658/1024 estimatedTokens=2997/3500 taskBytes=2313 next=NONE output=tests/golden/WBV2-P1149-001/task-context.json
wbv2-module-coverage-bound task=WBV2-P1149-001 module=MODIFIER_READER_BATCH_FOUR added=8 verified=385 unverified=3360
module-task-complete task=WBV2-P1149-001 module=MODIFIER_READER_BATCH_FOUR next=null commands=4

View File

@@ -67,11 +67,11 @@
},
"moduleReceipt": {
"path": "tests/golden/WBV2-P1149-001/module-receipt.json",
"sha256": "8c0c1ac15c67dcf8896731b7b4c1ed1661b0ccb9fe6718af83c35e9cc04b8ee9"
"sha256": "62f0d1772b2d8a049f5dee846fc1a3be1949f9f51c70832e4990731f6952e41f"
},
"status": {
"path": "docs/status/WBV2-P1149-001.md",
"sha256": "e112ea060c91b500fff02d6d7c35e87518e9a00c2c8ad7bc670bd1794a19a900"
"sha256": "4b073b2e841be29b21869139c771df7b57aae57f5ccc70e07852da836ea9d86b"
},
"log": {
"path": "tests/golden/WBV2-P1149-001/module-run.log",
@@ -99,13 +99,13 @@
"dynamicInventoryPath": "tests/golden/WBV2/dynamic-inventory.json",
"dynamicSourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
"dynamicUnitCount": 3745,
"dynamicVerifiedUnits": 377,
"dynamicUnverifiedUnits": 3368,
"dynamicVerifiedUnits": 385,
"dynamicUnverifiedUnits": 3360,
"planningEstimate": 5200,
"historicalInventoryTotal": 6900,
"historicalEffectiveCompleted": 290,
"historicalEffectivePending": 6609,
"historicalReproduction": false
},
"nextTask": null
"nextTask": "WBV2-P1150-000"
}

View File

@@ -115,13 +115,13 @@
},
"dynamic": {
"path": "tests/golden/WBV2/dynamic-inventory.json",
"sha256": "6ccf20cd15cf065e6432c209afa7e32557e619837f7880f0f38a2bc01ccaa02d",
"sha256": "d3d52d4021c68e3d1f2c25ba009f079376ab270c74046ec78f7c8ce8cb6b420a",
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
"unitCount": 3745,
"planningEstimate": 5200,
"hardTarget": false,
"verifiedUnits": 377,
"unverifiedUnits": 3368
"verifiedUnits": 385,
"unverifiedUnits": 3360
}
},
"nextTask": null

View File

@@ -0,0 +1,36 @@
{
"schemaVersion": 1,
"task": "WBV2-P1150-000",
"operation": "AUTHORIZE_SOURCE_BACKED_MODULE_BATCH",
"taskClass": "QUEUE_ENABLEMENT",
"status": "PASS",
"parent": {
"task": "WBV2-P1149-001",
"manifest": "tests/golden/WBV2-P1149-001/manifest.json",
"manifestSha256": "1f031db52009e862852f802cb4273ec53e5b1c004fff7bfd0e469cbaf65a64c4"
},
"module": {
"moduleId": "MODIFIER_READER_BATCH_FIVE",
"task": "WBV2-P1150-001",
"batchSize": 8,
"sourceUnits": [
"modifier-source:MOD_meshcache",
"modifier-source:MOD_meshsequencecache",
"modifier-source:MOD_multires",
"modifier-source:MOD_ocean",
"rna-struct:MeshCacheModifier",
"rna-struct:MeshSequenceCacheModifier",
"rna-struct:MultiresModifier",
"rna-struct:OceanModifier"
],
"sourceBacked": true
},
"inventory": {
"unitCount": 3745,
"verifiedUnits": 385,
"unverifiedUnits": 3360,
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
"boundUnitDelta": 0
},
"nextTask": "WBV2-P1150-001"
}

View File

@@ -0,0 +1,12 @@
[main dfe86bef3] chore(web): continuous handoff WBV2-P1150-001
14 files changed, 7127 insertions(+), 7 deletions(-)
create mode 100644 docs/status/WBV2-P1150-001.md
create mode 100644 docs/tasks/WBV2-P1150-001.md
create mode 100644 tests/files/web/modifier_reader_batch_five_scene.blend
create mode 100644 tests/golden/WBV2-P1150-000/manifest.json
create mode 100644 tests/golden/WBV2-P1150-000/module-execution-plan.json
create mode 100644 tests/golden/WBV2-P1150-001/manifest.json
create mode 100644 tests/golden/WBV2-P1150-001/modifier-reader-batch-production.json
create mode 100644 tests/golden/WBV2-P1150-001/module-receipt.json
create mode 100644 tests/golden/WBV2-P1150-001/module-run.log
create mode 100644 tests/golden/WBV2-P1150-001/task-context.json

View File

@@ -0,0 +1,12 @@
context-governance-ok task=WBV2-P1150-001 contentTokens=1970 envelopeTokens=657/1024 estimatedTokens=2994/3500 inputs=0 commands=1
{"schemaVersion":1,"operation":"BLENDER_WEB_EXECUTION_CONTROL_PLANE","status":"PASS","authority":{"executionPointer":"docs/EXECUTION_QUEUE.md","productCapabilities":"docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json","legacyCoverage":"tests/golden/M15-03A/next-task-plan.json","historicalEvidence":"tests/golden/corrective/"},"queue":{"currentTask":"WBV2-P1150-001","parentManifest":"tests/golden/WBV2-P1150-000/manifest.json","parentTask":"WBV2-P1150-000","parentNextTask":"WBV2-P1150-001","activeCatalogTask":null,"legacyCoverageTask":"M16-GAP-00282","legacyCoverageParentManifest":"tests/golden/M16-GAP-00281/manifest.json","legacyCoverageState":"active","runnableInputs":null},"efficiency":{"legacyGapTasks":6900,"legacyCompleted":281,"legacyPending":6618,"capabilityClusters":3,"mappedLegacyGaps":9,"averageGapsPerCapability":3,"productiveLane":0,"rule":"one capability task may close multiple legacy cases; legacy cases remain regression coverage"},"dynamicInventory":{"path":"tests/golden/WBV2/dynamic-inventory.json","manifestPath":"tests/golden/WBV2/dynamic-inventory-manifest.json","sourceTreeSha256":"600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202","sourceFiles":6206,"unitCount":3745,"planningEstimate":5200,"hardTarget":false,"verifiedUnits":393,"unverifiedUnits":3352},"capabilityClusters":{"ASSET_CATALOG":{"capabilityId":"CAP-ASSET-CATALOG-MUTATION","sourceGaps":5,"parityLevel":"L0","targetParityLevel":"L4","lifecycleStatus":"planned"},"MODIFIER":{"capabilityId":"CAP-MODIFIER-STATE-MUTATION","sourceGaps":2,"parityLevel":"L0","targetParityLevel":"L3","lifecycleStatus":"planned"},"MESH":{"capabilityId":"CAP-MESH-POSITIVE-EDIT","sourceGaps":2,"parityLevel":"L0","targetParityLevel":"L3","lifecycleStatus":"planned"}},"issues":[],"remediation":[],"allowUnrunnable":true,"inputDigest":"82d38fc4d28b8866a6a3993fde1c5b69160bdb219909a325b2715b0a4e1b3002"}
v2-task-index-ok tasks=81 active=NONE catalog=tests/golden/WBV2/task-catalog.jsonl
v2-handoff-ok task=WBV2-P1150-001 parent=WBV2-P1150-000 status=done artifacts=19
> blender-web-editor@0.1.0-rc.1 typecheck
> tsc -p tsconfig.json --noEmit
> blender-web-editor@0.1.0-rc.1 lint
> eslint app

View File

@@ -0,0 +1 @@
local_head=dfe86bef38818c0a7132f49b0fb78b196b4395ed remote_head=dfe86bef38818c0a7132f49b0fb78b196b4395ed

View File

@@ -0,0 +1,4 @@
remote: . Processing 1 references
remote: Processed 1 references in total
To https://gitea.meswork.com/wangdequan/workinf_Blender_Wasm.git
3c9ac9992..dfe86bef3 main -> main

View File

@@ -0,0 +1,8 @@
v2-task-index-generated tasks=81 active=NONE output=tests/golden/WBV2/task-index.json
task-context-ok task=WBV2-P1150-001 parent=WBV2-P1150-000 contentTokens=1970 envelopeTokens=657/1024 estimatedTokens=2994/3500 taskBytes=2301 next=NONE output=tests/golden/WBV2-P1150-001/task-context.json
wbv2-module-coverage-bound task=WBV2-P1150-001 module=MODIFIER_READER_BATCH_FIVE added=8 verified=393 unverified=3352
wbv2-module-coverage-bound task=WBV2-P1150-001 module=MODIFIER_READER_BATCH_FIVE added=8 verified=393 unverified=3352
source-dynamic-inventory-generated files=6206 units=3745 planningEstimate=5200 sourceTree=600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202 output=tests/golden/WBV2/dynamic-inventory.json
source-dynamic-inventory-ok files=6206 units=3745 planningEstimate=5200 verified=393 unverified=3352 sourceTree=600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202
wbv2-module-batch-finalized task=WBV2-P1150-001 verified=393 unverified=3352
module-task-complete task=WBV2-P1150-001 module=MODIFIER_READER_BATCH_FIVE next=null commands=4

View File

@@ -71,7 +71,7 @@
},
"status": {
"path": "docs/status/WBV2-P1150-001.md",
"sha256": "0acbab59f91ae8babd1de4f1451e7d51a2377f7593516b3ce20ee8d9cb7cde69"
"sha256": "917d81f22d2ae35acc037f22b0a6a14ab6e6106bce5601e2b6c8003a45e5058f"
},
"log": {
"path": "tests/golden/WBV2-P1150-001/module-run.log",
@@ -107,5 +107,5 @@
"historicalEffectivePending": 6609,
"historicalReproduction": false
},
"nextTask": null
"nextTask": "WBV2-P1151-000"
}

View File

@@ -0,0 +1,76 @@
{
"schemaVersion": 1,
"task": "WBV2-P1151-000",
"operation": "AUTHORIZE_SOURCE_BACKED_MODULE_BATCH",
"taskClass": "QUEUE_ENABLEMENT",
"status": "PASS",
"parent": {
"task": "WBV2-P1150-001",
"manifest": "tests/golden/WBV2-P1150-001/manifest.json",
"manifestSha256": "98df7f27ebf6575f81b96b89b92cdb6016122f5a0e5470a8fd039eb30e2a6d9e"
},
"module": {
"moduleId": "GREASE_PENCIL_MODIFIER_READER_BATCH",
"task": "WBV2-P1151-001",
"batchSize": 48,
"sourceUnits": [
"modifier-source:MOD_grease_pencil_armature",
"modifier-source:MOD_grease_pencil_array",
"modifier-source:MOD_grease_pencil_build",
"modifier-source:MOD_grease_pencil_color",
"modifier-source:MOD_grease_pencil_dash",
"modifier-source:MOD_grease_pencil_envelope",
"modifier-source:MOD_grease_pencil_hook",
"modifier-source:MOD_grease_pencil_lattice",
"modifier-source:MOD_grease_pencil_length",
"modifier-source:MOD_grease_pencil_mirror",
"modifier-source:MOD_grease_pencil_multiply",
"modifier-source:MOD_grease_pencil_noise",
"modifier-source:MOD_grease_pencil_offset",
"modifier-source:MOD_grease_pencil_opacity",
"modifier-source:MOD_grease_pencil_outline",
"modifier-source:MOD_grease_pencil_shrinkwrap",
"modifier-source:MOD_grease_pencil_simplify",
"modifier-source:MOD_grease_pencil_smooth",
"modifier-source:MOD_grease_pencil_subdiv",
"modifier-source:MOD_grease_pencil_texture",
"modifier-source:MOD_grease_pencil_thickness",
"modifier-source:MOD_grease_pencil_time",
"modifier-source:MOD_grease_pencil_tint",
"modifier-source:MOD_grease_pencil_weight_angle",
"modifier-source:MOD_grease_pencil_weight_proximity",
"rna-struct:GreasePencilArmatureModifier",
"rna-struct:GreasePencilArrayModifier",
"rna-struct:GreasePencilBuildModifier",
"rna-struct:GreasePencilColorModifier",
"rna-struct:GreasePencilEnvelopeModifier",
"rna-struct:GreasePencilHookModifier",
"rna-struct:GreasePencilLatticeModifier",
"rna-struct:GreasePencilLengthModifier",
"rna-struct:GreasePencilMirrorModifier",
"rna-struct:GreasePencilMultiplyModifier",
"rna-struct:GreasePencilNoiseModifier",
"rna-struct:GreasePencilOffsetModifier",
"rna-struct:GreasePencilOpacityModifier",
"rna-struct:GreasePencilOutlineModifier",
"rna-struct:GreasePencilShrinkwrapModifier",
"rna-struct:GreasePencilSimplifyModifier",
"rna-struct:GreasePencilSmoothModifier",
"rna-struct:GreasePencilSubdivModifier",
"rna-struct:GreasePencilTextureModifier",
"rna-struct:GreasePencilTimeModifier",
"rna-struct:GreasePencilTintModifier",
"rna-struct:GreasePencilWeightAngleModifier",
"rna-struct:GreasePencilWeightProximityModifier"
],
"sourceBacked": true
},
"inventory": {
"unitCount": 3745,
"verifiedUnits": 393,
"unverifiedUnits": 3352,
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
"boundUnitDelta": 0
},
"nextTask": "WBV2-P1151-001"
}

View File

@@ -0,0 +1,11 @@
[main 0c74adf96] chore(web): continuous handoff WBV2-P1151-001
14 files changed, 8688 insertions(+), 8 deletions(-)
create mode 100644 docs/status/WBV2-P1151-001.md
create mode 100644 docs/tasks/WBV2-P1151-001.md
create mode 100644 tests/golden/WBV2-P1151-000/manifest.json
create mode 100644 tests/golden/WBV2-P1151-000/module-execution-plan.json
create mode 100644 tests/golden/WBV2-P1151-001/manifest.json
create mode 100644 tests/golden/WBV2-P1151-001/modifier-reader-batch-production.json
create mode 100644 tests/golden/WBV2-P1151-001/module-receipt.json
create mode 100644 tests/golden/WBV2-P1151-001/module-run.log
create mode 100644 tests/golden/WBV2-P1151-001/task-context.json

View File

@@ -0,0 +1,12 @@
context-governance-ok task=WBV2-P1151-001 contentTokens=1829 envelopeTokens=648/1024 estimatedTokens=2853/3500 inputs=0 commands=1
{"schemaVersion":1,"operation":"BLENDER_WEB_EXECUTION_CONTROL_PLANE","status":"PASS","authority":{"executionPointer":"docs/EXECUTION_QUEUE.md","productCapabilities":"docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json","legacyCoverage":"tests/golden/M15-03A/next-task-plan.json","historicalEvidence":"tests/golden/corrective/"},"queue":{"currentTask":"WBV2-P1151-001","parentManifest":"tests/golden/WBV2-P1151-000/manifest.json","parentTask":"WBV2-P1151-000","parentNextTask":"WBV2-P1151-001","activeCatalogTask":null,"legacyCoverageTask":"M16-GAP-00282","legacyCoverageParentManifest":"tests/golden/M16-GAP-00281/manifest.json","legacyCoverageState":"active","runnableInputs":null},"efficiency":{"legacyGapTasks":6900,"legacyCompleted":281,"legacyPending":6618,"capabilityClusters":3,"mappedLegacyGaps":9,"averageGapsPerCapability":3,"productiveLane":0,"rule":"one capability task may close multiple legacy cases; legacy cases remain regression coverage"},"dynamicInventory":{"path":"tests/golden/WBV2/dynamic-inventory.json","manifestPath":"tests/golden/WBV2/dynamic-inventory-manifest.json","sourceTreeSha256":"600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202","sourceFiles":6206,"unitCount":3745,"planningEstimate":5200,"hardTarget":false,"verifiedUnits":441,"unverifiedUnits":3304},"capabilityClusters":{"ASSET_CATALOG":{"capabilityId":"CAP-ASSET-CATALOG-MUTATION","sourceGaps":5,"parityLevel":"L0","targetParityLevel":"L4","lifecycleStatus":"planned"},"MODIFIER":{"capabilityId":"CAP-MODIFIER-STATE-MUTATION","sourceGaps":2,"parityLevel":"L0","targetParityLevel":"L3","lifecycleStatus":"planned"},"MESH":{"capabilityId":"CAP-MESH-POSITIVE-EDIT","sourceGaps":2,"parityLevel":"L0","targetParityLevel":"L3","lifecycleStatus":"planned"}},"issues":[],"remediation":[],"allowUnrunnable":true,"inputDigest":"cce7a5010266c618620ebd96b06b4e95f94503bfa164629a6b761e4c6265a33c"}
v2-task-index-ok tasks=83 active=NONE catalog=tests/golden/WBV2/task-catalog.jsonl
v2-handoff-ok task=WBV2-P1151-001 parent=WBV2-P1151-000 status=done artifacts=59
> blender-web-editor@0.1.0-rc.1 typecheck
> tsc -p tsconfig.json --noEmit
> blender-web-editor@0.1.0-rc.1 lint
> eslint app

View File

@@ -0,0 +1 @@
local_head=0c74adf96cafd0731cc308fb31d1cb398a007952 remote_head=0c74adf96cafd0731cc308fb31d1cb398a007952

View File

@@ -0,0 +1,4 @@
remote: . Processing 1 references
remote: Processed 1 references in total
To https://gitea.meswork.com/wangdequan/workinf_Blender_Wasm.git
dfe86bef3..0c74adf96 main -> main

View File

@@ -0,0 +1,8 @@
v2-task-index-generated tasks=83 active=NONE output=tests/golden/WBV2/task-index.json
task-context-ok task=WBV2-P1151-001 parent=WBV2-P1151-000 contentTokens=1829 envelopeTokens=648/1024 estimatedTokens=2853/3500 taskBytes=1722 next=NONE output=tests/golden/WBV2-P1151-001/task-context.json
wbv2-module-coverage-bound task=WBV2-P1151-001 module=GREASE_PENCIL_MODIFIER_READER_BATCH added=48 verified=441 unverified=3304
wbv2-module-coverage-bound task=WBV2-P1151-001 module=GREASE_PENCIL_MODIFIER_READER_BATCH added=48 verified=441 unverified=3304
source-dynamic-inventory-generated files=6206 units=3745 planningEstimate=5200 sourceTree=600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202 output=tests/golden/WBV2/dynamic-inventory.json
source-dynamic-inventory-ok files=6206 units=3745 planningEstimate=5200 verified=441 unverified=3304 sourceTree=600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202
wbv2-module-batch-finalized task=WBV2-P1151-001 verified=441 unverified=3304
module-task-complete task=WBV2-P1151-001 module=GREASE_PENCIL_MODIFIER_READER_BATCH next=null commands=4

View File

@@ -227,11 +227,11 @@
},
"moduleReceipt": {
"path": "tests/golden/WBV2-P1151-001/module-receipt.json",
"sha256": "06917514f586ad32fb588c3595209971187d0b67c6651378f29b0da0ca3174b3"
"sha256": "d5a9379fb1ce4d3f8aa54c77d49e75172a0cf32f5255a38634437db6605643d0"
},
"status": {
"path": "docs/status/WBV2-P1151-001.md",
"sha256": "b07e007e9affc524667c6bfdb443816876f3df62eb301905d409ee0cdf2ed7cd"
"sha256": "d056941e7aac051c994e158604288a0b4d9e1499137b577097ea0d14b63d75b5"
},
"log": {
"path": "tests/golden/WBV2-P1151-001/module-run.log",
@@ -259,8 +259,8 @@
"dynamicInventoryPath": "tests/golden/WBV2/dynamic-inventory.json",
"dynamicSourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
"dynamicUnitCount": 3745,
"dynamicVerifiedUnits": 441,
"dynamicUnverifiedUnits": 3304,
"dynamicVerifiedUnits": 442,
"dynamicUnverifiedUnits": 3303,
"planningEstimate": 5200,
"historicalInventoryTotal": 6900,
"historicalEffectiveCompleted": 290,

View File

@@ -218,13 +218,13 @@
},
"dynamic": {
"path": "tests/golden/WBV2/dynamic-inventory.json",
"sha256": "31f45ea6b72993d47a29c2e17f81224e0b4b419b8149ff2b1d25fed6a15f5c3c",
"sha256": "f372626a9ae77da2b072a290f1fd5d99046218e9e2ac3d63fb97234805e4962b",
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202",
"unitCount": 3745,
"planningEstimate": 5200,
"hardTarget": false,
"verifiedUnits": 441,
"unverifiedUnits": 3304
"verifiedUnits": 442,
"unverifiedUnits": 3303
}
},
"nextTask": null

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -5,19 +5,19 @@
"artifacts": {
"inventory": {
"path": "tests/golden/WBV2/dynamic-inventory.json",
"sha256": "6ccf20cd15cf065e6432c209afa7e32557e619837f7880f0f38a2bc01ccaa02d"
"sha256": "acb78f7d5a01069e3866cfe21c35fcfa3a80181e4729ea0d0d6db387cf019960"
},
"inventoryManifest": {
"path": "tests/golden/WBV2/dynamic-inventory-manifest.json",
"sha256": "d85db305e0476115a6508fcb178d6adabc3b352b2837de9e3776722981b8e8fc"
"sha256": "3825ab486bd2752a86a601fd2ad0b1b420eaa1fbe51f7cd751b2d2acda42d660"
},
"bindings": {
"path": "tests/golden/WBV2/dynamic-coverage-bindings.json",
"sha256": "15da1b24eceed1de4cec27f4d47d3171163dc323247af278217920ca376c6b32"
"sha256": "950e950d02865e095212ad10aa9ec83e37bb9f74e7f88c9e305dce92e327f1f8"
},
"report": {
"path": "tests/golden/WBV2/dynamic-coverage-audit.json",
"sha256": "c67af84b3229806950712079b0d05517d041823e2504a47540e8b1166df65049"
"sha256": "ece41eebf229e8a6c19539ac153eb6d449ef5134c3f7ccbfcc55ab9251508da9"
},
"generator": {
"path": "tools/web/reconcile-source-dynamic-coverage.mjs",
@@ -26,9 +26,9 @@
},
"coverage": {
"unitCount": 3745,
"verifiedUnits": 377,
"unverifiedUnits": 3368,
"boundUnitDelta": 8,
"verifiedUnits": 442,
"unverifiedUnits": 3303,
"boundUnitDelta": 1,
"sourceTreeSha256": "600cb3dd441f09d9655b740735fbf8fa49ad6c14d308c68d59a29f9c338e4202"
},
"historical": {

View File

@@ -24,7 +24,7 @@
},
"planningEstimate": 5200,
"hardTarget": false,
"verifiedUnits": 377,
"unverifiedUnits": 3368,
"verifiedUnits": 442,
"unverifiedUnits": 3303,
"deterministic": true
}

View File

@@ -14,11 +14,11 @@
},
"inventory": {
"path": "tests/golden/WBV2/dynamic-inventory.json",
"sha256": "6ccf20cd15cf065e6432c209afa7e32557e619837f7880f0f38a2bc01ccaa02d"
"sha256": "acb78f7d5a01069e3866cfe21c35fcfa3a80181e4729ea0d0d6db387cf019960"
},
"report": {
"path": "tests/golden/WBV2/dynamic-inventory-check-report.json",
"sha256": "715b24623dfbe5ef1ce60f9ddb64fb1ffd9ac4bf4ed18162dc68580adc31e1d8"
"sha256": "7724729292c472b13741f1a2691405d2aac8729da1ba1501cb9456fb89f8f305"
},
"status": {
"path": "docs/status/WBV2-DYNAMIC-INVENTORY.md",
@@ -47,9 +47,9 @@
},
"planningEstimate": 5200,
"hardTarget": false,
"verifiedUnits": 377,
"unverifiedUnits": 3368,
"boundCaseDelta": 8
"verifiedUnits": 442,
"unverifiedUnits": 3303,
"boundCaseDelta": 1
},
"historical": {
"initialEstimate": 6900,

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,69 @@
import crypto from "node:crypto";
import fs from "node:fs";
import path from "node:path";
import { execFileSync } from "node:child_process";
import { fileURLToPath } from "node:url";
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
const abs = (file) => path.join(root, file);
const json = (file) => JSON.parse(fs.readFileSync(abs(file), "utf8"));
const write = (file, value) => fs.writeFileSync(abs(file), `${JSON.stringify(value, null, 2)}\n`);
const sha = (file) => crypto.createHash("sha256").update(fs.readFileSync(abs(file))).digest("hex");
const argIndex = process.argv.indexOf("--task");
const task = argIndex >= 0 ? process.argv[argIndex + 1] : null;
if (!task) throw new Error("usage: node tools/web/finalize-wbv2-module-batch.mjs --task <task-id>");
const manifestPath = `tests/golden/${task}/manifest.json`;
const manifest = json(manifestPath);
const receiptPath = manifest.artifacts.moduleReceipt.path;
const statusPath = manifest.artifacts.status.path;
const inventory = json("tests/golden/WBV2/dynamic-inventory.json");
const verifiedUnits = inventory.coverage.verifiedUnits;
const unverifiedUnits = inventory.coverage.unverifiedUnits;
const taskPlan = json(manifest.artifacts.plan.path);
const taskRecord = taskPlan.tasks.find((candidate) => candidate.id === task);
const bindingDelta = taskRecord?.module?.coverageBindings?.length ?? 0;
const receipt = json(receiptPath);
if (receipt.inventory?.dynamic) {
receipt.inventory.dynamic.verifiedUnits = verifiedUnits;
receipt.inventory.dynamic.unverifiedUnits = unverifiedUnits;
receipt.inventory.dynamic.sha256 = sha("tests/golden/WBV2/dynamic-inventory.json");
}
write(receiptPath, receipt);
let status = fs.readFileSync(abs(statusPath), "utf8");
status = status.replace(/verified `\d+`/g, `verified \`${verifiedUnits}\``).replace(/unverified `\d+`/g, `unverified \`${unverifiedUnits}\``);
if (!status.includes("this-segment binding delta:")) status = status.replace(/(dynamic source inventory:[^\n]*)/, `$1; this-segment binding delta: \`${bindingDelta}\``);
fs.writeFileSync(abs(statusPath), status);
for (const artifact of Object.values(manifest.artifacts ?? {})) {
if (artifact?.path && fs.existsSync(abs(artifact.path))) artifact.sha256 = sha(artifact.path);
}
manifest.assertions.dynamicVerifiedUnits = verifiedUnits;
manifest.assertions.dynamicUnverifiedUnits = unverifiedUnits;
write(manifestPath, manifest);
execFileSync(process.execPath, [abs("tools/web/bind-wbv2-module-coverage.mjs"), "--task", task], { cwd: root, stdio: "inherit" });
execFileSync(process.execPath, [abs("tools/web/generate-source-dynamic-inventory.mjs"), "--output", abs("tests/golden/WBV2/dynamic-inventory.json")], { cwd: root, stdio: "inherit" });
const inventoryPath = "tests/golden/WBV2/dynamic-inventory.json";
const checkReportPath = "tests/golden/WBV2/dynamic-inventory-check-report.json";
const inventoryManifestPath = "tests/golden/WBV2/dynamic-inventory-manifest.json";
const coverageManifestPath = "tests/golden/WBV2/dynamic-coverage-manifest.json";
const bindingsPath = "tests/golden/WBV2/dynamic-coverage-bindings.json";
const auditPath = "tests/golden/WBV2/dynamic-coverage-audit.json";
// The checker validates manifest hashes before it rewrites its compact report.
// Bind the newly generated inventory and the previous report first, then run
// the checker once, and finally bind the report it produced.
const inventoryManifest = json(inventoryManifestPath);
inventoryManifest.artifacts.inventory.sha256 = sha(inventoryPath);
inventoryManifest.artifacts.report.sha256 = sha(checkReportPath);
write(inventoryManifestPath, inventoryManifest);
execFileSync(process.execPath, [abs("tools/web/check-source-dynamic-inventory.mjs")], { cwd: root, stdio: "inherit" });
const refreshedInventoryManifest = json(inventoryManifestPath);
refreshedInventoryManifest.artifacts.inventory.sha256 = sha(inventoryPath);
refreshedInventoryManifest.artifacts.report.sha256 = sha(checkReportPath);
write(inventoryManifestPath, refreshedInventoryManifest);
const coverageManifest = json(coverageManifestPath);
coverageManifest.artifacts.inventory.sha256 = sha(inventoryPath);
coverageManifest.artifacts.inventoryManifest.sha256 = sha(inventoryManifestPath);
coverageManifest.artifacts.bindings.sha256 = sha(bindingsPath);
coverageManifest.artifacts.report.sha256 = sha(auditPath);
coverageManifest.coverage = { ...coverageManifest.coverage, unitCount: inventory.summary.unitCount, verifiedUnits, unverifiedUnits, sourceTreeSha256: inventory.authority.sourceTreeSha256 };
write(coverageManifestPath, coverageManifest);
process.stdout.write(`wbv2-module-batch-finalized task=${task} verified=${verifiedUnits} unverified=${unverifiedUnits}\n`);

View File

@@ -97,6 +97,7 @@ if (failed || !sourceUnchanged) {
writeJson(manifestPath, { schemaVersion: 1, task, parentTask: parentId, operation: "MODULE_FUNCTION_EXECUTION", taskClass: "MODULE", status: "done", enablingTask: true, parityStateChange: false, runtime: "BLENDER_WEB_FUNCTION_MODULE", artifacts, assertions: { moduleId: record.module.moduleId, sourceBacked: true, positiveCases: record.module.positive.length, negativeCases: record.module.negative.length, recoveryCases: record.module.recovery.length, commandCount: results.length, reusedReceiptCount: reusedReceipts.length, sourceUnchanged, fullFamilyParity: false, dynamicInventoryPath, dynamicSourceTreeSha256: dynamicInventory.authority.sourceTreeSha256, dynamicUnitCount: dynamicInventory.summary.unitCount, dynamicVerifiedUnits: dynamicInventory.coverage.verifiedUnits, dynamicUnverifiedUnits: dynamicInventory.coverage.unverifiedUnits, planningEstimate: dynamicInventory.policy.planningEstimate, historicalInventoryTotal: 6900, historicalEffectiveCompleted: 290, historicalEffectivePending: 6609, historicalReproduction: false }, nextTask });
if (record.module.coverageBindings?.length) {
execFileSync(process.execPath, [abs("tools/web/bind-wbv2-module-coverage.mjs"), "--task", task], { cwd: root, stdio: "inherit" });
execFileSync(process.execPath, [abs("tools/web/finalize-wbv2-module-batch.mjs"), "--task", task], { cwd: root, stdio: "inherit" });
}
if (nextTask) execFileSync(process.execPath, [abs("tools/web/check-task-context.mjs"), "--task", nextTask, "--write"], { cwd: root, stdio: "inherit" });
let next = read("nextTask.md");