Advance deduplicated object parenting coverage
This commit is contained in:
@@ -13,9 +13,9 @@
|
||||
| 字段 | 值 |
|
||||
| --- | --- |
|
||||
| 里程碑 | WBV2 capability workflow |
|
||||
| 当前任务 | `WBV2-P18-003` |
|
||||
| parent manifest | `tests/golden/WBV2-P18-002/manifest.json` |
|
||||
| 任务卡 | [`tasks/WBV2-P18-003.md`](tasks/WBV2-P18-003.md) |
|
||||
| 当前任务 | `WBV2-P19-003` |
|
||||
| parent manifest | `tests/golden/WBV2-P19-002/manifest.json` |
|
||||
| 任务卡 | [`tasks/WBV2-P19-003.md`](tasks/WBV2-P19-003.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` |
|
||||
|
||||
@@ -9,3 +9,6 @@
|
||||
- nextTask: `NONE`
|
||||
|
||||
Only the exact createPrimitive operator is graduated. The canonical inventory remains immutable; effective counts are derived from hash-bound completion overlays.
|
||||
- authorized continuation: `WBV2-P19-000`
|
||||
|
||||
Object Parent may continue under a new root without changing the P18 overlay.
|
||||
|
||||
7
docs/status/WBV2-P19-000.md
Normal file
7
docs/status/WBV2-P19-000.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# WBV2-P19-000 status
|
||||
|
||||
- task: `WBV2-P19-000`; parent: `WBV2-P18-003`; status: `done`
|
||||
- candidate: `OBJECT_OPERATIONS.PARENT`; source API is present
|
||||
- effective inventory carried forward: `285` completed, `6614` pending
|
||||
- duplicate validation: `forbidden`; representative slice only
|
||||
- nextTask: `WBV2-P19-001`
|
||||
7
docs/status/WBV2-P19-001.md
Normal file
7
docs/status/WBV2-P19-001.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# WBV2-P19-001 status
|
||||
|
||||
- task: `WBV2-P19-001`; parent: `WBV2-P19-000`; status: `done`
|
||||
- selected behavior: `setParent`; exact candidate: `operator:object.parent_set`
|
||||
- base inventory: `6900` total, `6618` pending; effective carried overlay: `6614` pending
|
||||
- behavior hash: `14a34d128abfe68e090e6d00c8f0eb1a935c6ea7a7189faa5dbf855011c2de23`; duplicate validation: `forbidden`
|
||||
- nextTask: `WBV2-P19-002`
|
||||
8
docs/status/WBV2-P19-002.md
Normal file
8
docs/status/WBV2-P19-002.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P19-002 status
|
||||
|
||||
- task: `WBV2-P19-002`; parent: `WBV2-P19-001`; status: `done`
|
||||
- exact inventory binding: `operator:object.parent_set` via `setParent`
|
||||
- parent relation: `object:BasicArea -> object:BasicCamera`; revisions: `1 -> 4` sequential
|
||||
- malformed parent rejected; save/reopen: `EXACT`; deterministic second run: `true`
|
||||
- effective pending before overlay: `6614`; representative slice: `true`
|
||||
- nextTask: `WBV2-P19-003`
|
||||
9
docs/status/WBV2-P19-003.md
Normal file
9
docs/status/WBV2-P19-003.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# WBV2-P19-003 status
|
||||
|
||||
- task: `WBV2-P19-003`; parent: `WBV2-P19-002`; status: `done`
|
||||
- new feature claim: `OBJECT_OPERATIONS.PARENT`; exact binding: `operator:object.parent_set`
|
||||
- base inventory: `6900` total, `281` completed, `6618` pending
|
||||
- cumulative overlay: `286` effective completed, `6613` effective pending, claimed complete overlay: `5`
|
||||
- repeated Blender/Chromium validation: `0`; unique behavior batches: Paint, Duplicate, Create, Parent
|
||||
- provenance epoch: `2`; release: `AUTHORIZED_REBASELINE_ONLY`; fullHistoricalReproduction: `false`
|
||||
- nextTask: `NONE`
|
||||
23
docs/tasks/WBV2-P19-000.md
Normal file
23
docs/tasks/WBV2-P19-000.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# WBV2-P19-000: object parent continuation root
|
||||
|
||||
- task: WBV2-P19-000
|
||||
- parent: WBV2-P18-003
|
||||
- status: done
|
||||
- gap: workflow:authorize_object_parent_continuation
|
||||
- ownerFamily: PROGRAM
|
||||
- targetImplementationClass: LOCAL_BOUNDED
|
||||
|
||||
## 目标
|
||||
|
||||
Authorize one source-backed Object Parent behavior after the P18 create overlay.
|
||||
|
||||
## 验收
|
||||
|
||||
- `node tools/web/generate-wbv2-parent-root.mjs`
|
||||
- `node tools/web/check-execution-control-plane.mjs`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P19-000/`
|
||||
- Manifest: `tests/golden/WBV2-P19-000/manifest.json`
|
||||
- Rollback: restore P18-003 as queue parent.
|
||||
34
docs/tasks/WBV2-P19-001.md
Normal file
34
docs/tasks/WBV2-P19-001.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# WBV2-P19-001: select_object_parent_batch
|
||||
|
||||
- task: WBV2-P19-001
|
||||
- parent: WBV2-P19-000
|
||||
- status: in_progress
|
||||
- gap: capability:OBJECT_OPERATIONS.PARENT
|
||||
- ownerFamily: PARITY
|
||||
- targetImplementationClass: LOCAL_BOUNDED
|
||||
|
||||
## 目标
|
||||
|
||||
Select setParent as one unique Object Operations behavior.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `blender-5.2.0/source/blender/web_engine/web_engine_api.cpp`
|
||||
- Existing client: `web/app/src/engine-client/WebEngineClient.ts`
|
||||
- Inventory: `tests/golden/WBV2-P0-002/parity-map.json`
|
||||
- Production entrypoint: `node tools/web/generate-wbv2-parent-selection.mjs --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- source command is hash-bound
|
||||
- create and duplicate evidence is not rerun
|
||||
- one legacy operator binding is selected
|
||||
- malformed, hash-drift, unsupported, or false-completion input keeps in_progress
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P19-001 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P19-001/`
|
||||
- Status: `docs/status/WBV2-P19-001.md`
|
||||
- Manifest: `tests/golden/WBV2-P19-001/manifest.json`
|
||||
- Rollback: restore P19-000 as queue parent.
|
||||
34
docs/tasks/WBV2-P19-002.md
Normal file
34
docs/tasks/WBV2-P19-002.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# WBV2-P19-002: object parent engine receipt
|
||||
|
||||
- task: WBV2-P19-002
|
||||
- parent: WBV2-P19-001
|
||||
- status: in_progress
|
||||
- gap: capability:OBJECT_OPERATIONS.PARENT
|
||||
- ownerFamily: OBJECT
|
||||
- targetImplementationClass: LOCAL_EXACT
|
||||
|
||||
## 目标
|
||||
|
||||
Bind setParent, undo/redo, malformed rejection, and exact save/reopen to compiled WASM Main in Chromium.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused source: `tests/golden/WBV2-P19-001/object-parent-selection-report.json`
|
||||
- Production test: `web/tests/e2e/wbv2-object-parent-production.spec.ts`
|
||||
- Production entrypoint: `npm --prefix web run test:e2e -- --workers=1 tests/e2e/wbv2-object-parent-production.spec.ts`
|
||||
|
||||
## 验收
|
||||
|
||||
- parent relation changes
|
||||
- undo/redo revisions are sequential
|
||||
- malformed parent input fails closed without Main mutation
|
||||
- save/reopen is exact and deterministic
|
||||
- Chromium is the only browser
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P19-002 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P19-002/`
|
||||
- Status: `docs/status/WBV2-P19-002.md`
|
||||
- Manifest: `tests/golden/WBV2-P19-002/manifest.json`
|
||||
- Rollback: restore P19-001 as queue parent.
|
||||
34
docs/tasks/WBV2-P19-003.md
Normal file
34
docs/tasks/WBV2-P19-003.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# WBV2-P19-003: close object parent gate
|
||||
|
||||
- task: WBV2-P19-003
|
||||
- parent: WBV2-P19-002
|
||||
- status: in_progress
|
||||
- gap: workflow:close_object_parent_gate
|
||||
- ownerFamily: RELEASE
|
||||
- targetImplementationClass: LOCAL_BOUNDED
|
||||
|
||||
## 目标
|
||||
|
||||
Close the setParent gate and graduate only the exact operator binding.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused receipt: `tests/golden/WBV2-P19-002/object-parent-receipt-report.json`
|
||||
- Previous overlay: `tests/golden/WBV2-P18-003/inventory-completion-overlay.json`
|
||||
- Production entrypoint: `node tools/web/generate-wbv2-parent-gate.mjs --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- only object parent is claimed
|
||||
- effective inventory remains explicit
|
||||
- duplicate validation remains zero
|
||||
- malformed, hash-drift, unsupported, or false-completion input keeps in_progress
|
||||
- historical reproduction remains false
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P19-003 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P19-003/`
|
||||
- Status: `docs/status/WBV2-P19-003.md`
|
||||
- Manifest: `tests/golden/WBV2-P19-003/manifest.json`
|
||||
- Rollback: restore P19-002 as queue parent.
|
||||
@@ -240,12 +240,12 @@ Recorded: 2026-08-22 America/New_York
|
||||
|
||||
| Field | Value |
|
||||
| --- | --- |
|
||||
| Current task when this file was written | `WBV2-P18-003` |
|
||||
| Current task when this file was written | `WBV2-P19-003` |
|
||||
| Current task state | `done` |
|
||||
| Parent manifest | `tests/golden/WBV2-P18-002/manifest.json` |
|
||||
| Current task card | `docs/tasks/WBV2-P18-003.md` |
|
||||
| Parent manifest | `tests/golden/WBV2-P19-002/manifest.json` |
|
||||
| Current task card | `docs/tasks/WBV2-P19-003.md` |
|
||||
| Current task-context nextTask | `NONE` |
|
||||
| Focused command | `node tools/web/generate-wbv2-create-gate.mjs --write` |
|
||||
| Focused command | `node tools/web/generate-wbv2-parent-gate.mjs --write` |
|
||||
|
||||
The snapshot is informational and may become stale. On every resume, the queue,
|
||||
parent manifest, and fresh `print-task-context` output win. Never infer a task
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P18-003/object-create-gate-report.json",
|
||||
"sha256": "dc49009ce041727cd2f2b7dc712c210ec44cc1a3a7c4ae1ccb5c6c0af5ddefeb"
|
||||
"sha256": "cb227108e67eebcd9d3998e00f07c795490bc3d2e1f187508d4fafe842c84fca"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generate-wbv2-create-gate.mjs",
|
||||
@@ -46,7 +46,7 @@
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P18-003.md",
|
||||
"sha256": "ab5739b2e0c17b08a1c66266600c80d4b51eb4185e1d1e7978872df72fca50c5"
|
||||
"sha256": "577f8110aab7a592c0b267d9d8a8c7ee4dba8a0add20f8ccab5447286ae45f80"
|
||||
},
|
||||
"parityPlan": {
|
||||
"path": "tests/golden/WBV2-P18-003/create-task-plan.json",
|
||||
@@ -54,7 +54,7 @@
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P18-003/task-context.json",
|
||||
"sha256": "aa8b02b6b1c6bddaf8f2296561f67c999d1e67ec3757dd5bfcd3676289dd71ed"
|
||||
"sha256": "6eb7b4ab165db6bc359cc8885375cf30300013af324fe5dd713e3203666271b6"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
@@ -76,5 +76,10 @@
|
||||
"fullHistoricalReproduction": false,
|
||||
"deterministic": true
|
||||
},
|
||||
"nextTask": null
|
||||
"nextTask": "WBV2-P19-000",
|
||||
"continuation": {
|
||||
"authorized": true,
|
||||
"root": "WBV2-P19-000",
|
||||
"scope": "OBJECT_OPERATIONS_PARENT"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -150,7 +150,8 @@
|
||||
"baseInventoryPreserved": true,
|
||||
"inventoryRemainderExplicit": true,
|
||||
"noFalseLocalParity": true,
|
||||
"terminalQueuePointer": true
|
||||
"terminalQueuePointer": false,
|
||||
"authorizedContinuation": "WBV2-P19-000"
|
||||
},
|
||||
"nextTask": null
|
||||
"nextTask": "WBV2-P19-000"
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
"effective inventory remains explicit",
|
||||
"no duplicate validation or historical over-claim"
|
||||
],
|
||||
"nextTask": null,
|
||||
"nextTask": "WBV2-P19-000",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P18-003.md",
|
||||
@@ -164,7 +164,7 @@
|
||||
"totalTokens": 2401,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3425,
|
||||
"serializedContextTokens": 652,
|
||||
"serializedContextTokens": 654,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
|
||||
60
tests/golden/WBV2-P19-000/manifest.json
Normal file
60
tests/golden/WBV2-P19-000/manifest.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-000",
|
||||
"parentTask": "WBV2-P18-003",
|
||||
"operation": "AUTHORIZE_OBJECT_PARENT_CONTINUATION",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "READ_ONLY_OBJECT_PARENT_CONTINUATION_ROOT",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P18-003/manifest.json",
|
||||
"sha256": "b29ae27f827530488fb02998a119acc111bf624b86d58b02c4a36883486d14b4"
|
||||
},
|
||||
"parentReport": {
|
||||
"path": "tests/golden/WBV2-P18-003/object-create-gate-report.json",
|
||||
"sha256": "cb227108e67eebcd9d3998e00f07c795490bc3d2e1f187508d4fafe842c84fca"
|
||||
},
|
||||
"inventory": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8"
|
||||
},
|
||||
"sourceApi": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"
|
||||
},
|
||||
"sourceClient": {
|
||||
"path": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"sha256": "f6d9a8e0a16403bc6fb765195b8f1a619a28de7a75c59a412f1654d46e8ebc0b"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P19-000/parent-task-plan.json",
|
||||
"sha256": "d0e129c85f428eeeae328613a633220b9c431c08d9cce55626521f25b22374e6"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P19-000/parent-root-report.json",
|
||||
"sha256": "dbeee77d97b5618625682b25a2bf069f98802ac932570d7e2d5b23996afc105a"
|
||||
},
|
||||
"rootCard": {
|
||||
"path": "docs/tasks/WBV2-P19-000.md",
|
||||
"sha256": "deef232d528779a24018dd75fded386b80b6b5d6c6bb2be21cdfe33c4b54ce37"
|
||||
},
|
||||
"rootStatus": {
|
||||
"path": "docs/status/WBV2-P19-000.md",
|
||||
"sha256": "e94e8d4b076884a9b5b85827a18a89ac25aea49d9543a0331373c09101245c48"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"p18EvidencePreserved": true,
|
||||
"sourceApiBound": true,
|
||||
"inventoryTotal": 6900,
|
||||
"effectiveCompleted": 285,
|
||||
"effectivePending": 6614,
|
||||
"duplicateValidationAvoided": true,
|
||||
"representativeSliceOnly": true,
|
||||
"authorizedRebaselineOnly": true,
|
||||
"fullHistoricalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P19-001"
|
||||
}
|
||||
33
tests/golden/WBV2-P19-000/parent-root-report.json
Normal file
33
tests/golden/WBV2-P19-000/parent-root-report.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-000",
|
||||
"operation": "AUTHORIZE_OBJECT_PARENT_CONTINUATION",
|
||||
"status": "PASS",
|
||||
"parent": {
|
||||
"task": "WBV2-P18-003",
|
||||
"manifest": "tests/golden/WBV2-P18-003/manifest.json",
|
||||
"manifestSha256": "b29ae27f827530488fb02998a119acc111bf624b86d58b02c4a36883486d14b4",
|
||||
"report": "tests/golden/WBV2-P18-003/object-create-gate-report.json",
|
||||
"reportSha256": "cb227108e67eebcd9d3998e00f07c795490bc3d2e1f187508d4fafe842c84fca",
|
||||
"previousDecision": "READY_WITH_OBJECT_CREATE_SLICE_AND_INVENTORY_OVERLAY",
|
||||
"effectivePending": 6614
|
||||
},
|
||||
"continuation": {
|
||||
"root": "WBV2-P19-000",
|
||||
"firstTask": "WBV2-P19-001",
|
||||
"plannedTasks": 4,
|
||||
"candidate": "OBJECT_OPERATIONS.PARENT",
|
||||
"sourceApi": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"browser": "chromium",
|
||||
"noRepeatedExecution": true
|
||||
},
|
||||
"policy": {
|
||||
"p18EvidencePreserved": true,
|
||||
"sourceHistoryReadOnly": true,
|
||||
"representativeSliceOnly": true,
|
||||
"duplicateValidationAvoided": true,
|
||||
"authorizedRebaselineOnly": true,
|
||||
"fullHistoricalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P19-001"
|
||||
}
|
||||
146
tests/golden/WBV2-P19-000/parent-task-plan.json
Normal file
146
tests/golden/WBV2-P19-000/parent-task-plan.json
Normal file
@@ -0,0 +1,146 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_PARITY_V2_OBJECT_PARENT_EPOCH_1",
|
||||
"status": "ACTIVE_OBJECT_PARENT_QUEUE",
|
||||
"authority": "queue_reactivated_after_p18_create_gate",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"browserEvidence": [
|
||||
"chromium"
|
||||
],
|
||||
"forbiddenBrowsers": [
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mainAuthority": "blender_main",
|
||||
"reusePolicy": "source_hash_and_behavior_hash_deduplication"
|
||||
},
|
||||
"parentCreate": {
|
||||
"manifest": "tests/golden/WBV2-P18-003/manifest.json",
|
||||
"report": "tests/golden/WBV2-P18-003/object-create-gate-report.json",
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6614,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P19-000",
|
||||
"phase": "P19",
|
||||
"title": "authorize_object_parent_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P18-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-governance",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-000.md",
|
||||
"behavior": "Authorize one Object Parent behavior after the P18 create overlay.",
|
||||
"outputs": [
|
||||
"continuation root",
|
||||
"candidate scope",
|
||||
"hash boundary"
|
||||
],
|
||||
"acceptance": [
|
||||
"P18 overlay remains hash-bound",
|
||||
"setParent API is present",
|
||||
"one production task is active"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-001",
|
||||
"phase": "P19",
|
||||
"title": "select_object_parent_batch",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.PARENT",
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-selection",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-001.md",
|
||||
"behavior": "Select setParent as one unique Object Operations behavior.",
|
||||
"outputs": [
|
||||
"candidate report",
|
||||
"behavior hash",
|
||||
"dedupe key"
|
||||
],
|
||||
"acceptance": [
|
||||
"source command is hash-bound",
|
||||
"create/duplicate evidence is not rerun",
|
||||
"one legacy operator binding is selected"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-002",
|
||||
"phase": "P19",
|
||||
"title": "object_parent_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.PARENT",
|
||||
"implementationClass": "LOCAL_EXACT",
|
||||
"parallelGroup": "p19-object",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-002.md",
|
||||
"behavior": "Bind setParent, undo/redo, malformed rejection, and exact save/reopen to compiled WASM Main in Chromium.",
|
||||
"outputs": [
|
||||
"parent production report",
|
||||
"parent receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"parent relation changes",
|
||||
"undo/redo revisions are sequential",
|
||||
"malformed parent input fails closed",
|
||||
"save/reopen is exact"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-003",
|
||||
"phase": "P19",
|
||||
"title": "close_object_parent_gate",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-release",
|
||||
"gate": "G5",
|
||||
"card": "docs/tasks/WBV2-P19-003.md",
|
||||
"behavior": "Close the setParent gate and graduate only the exact operator binding.",
|
||||
"outputs": [
|
||||
"object parent gate",
|
||||
"completion overlay",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"only object parent is claimed",
|
||||
"effective inventory remains explicit",
|
||||
"no duplicate validation or historical over-claim"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
67
tests/golden/WBV2-P19-001/manifest.json
Normal file
67
tests/golden/WBV2-P19-001/manifest.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-001",
|
||||
"parentTask": "WBV2-P19-000",
|
||||
"operation": "SELECT_OBJECT_PARENT_BATCH",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "READ_ONLY_SOURCE_CANDIDATE_SELECTION",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P19-000/manifest.json",
|
||||
"sha256": "6d5494e404399226452d69f014211050032cfcae80a3aab449b2fb9f61b63b8b"
|
||||
},
|
||||
"inventory": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8"
|
||||
},
|
||||
"api": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"
|
||||
},
|
||||
"client": {
|
||||
"path": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"sha256": "f6d9a8e0a16403bc6fb765195b8f1a619a28de7a75c59a412f1654d46e8ebc0b"
|
||||
},
|
||||
"candidate": {
|
||||
"path": "tests/golden/WBV2-P19-001/object-parent-candidate-set.json",
|
||||
"sha256": "602445740a3351df31d71c1f61cd50feb5cf51572de2527efff7490e52acbbdb"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P19-001/object-parent-selection-report.json",
|
||||
"sha256": "ba9960c1aed7f0da68c1198dfbd926d39aed53c6d7421db7da0fe1089434d66b"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generate-wbv2-parent-selection.mjs",
|
||||
"sha256": "da71ec494960328dc89c86fdbc1e705d91f7346571df337e07596c59d3a64165"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P19-001.md",
|
||||
"sha256": "295578861be0c0daf0716dc3a3e5147ab8b450ba08bafbfc4d6db214f405ef4a"
|
||||
},
|
||||
"parityPlan": {
|
||||
"path": "tests/golden/WBV2-P19-001/parent-task-plan.json",
|
||||
"sha256": "c9822702d3b3fb5bb5b1eed958a93baf4d43820f18b95fe835cb8ebddd472ff5"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P19-001/task-context.json",
|
||||
"sha256": "9c75c01399c255ef6ac13198e58ea421ec589044381228e4ee4d761948a4a85b"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"legacyId": "operator:object.parent_set",
|
||||
"inventoryTotal": 6900,
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6614,
|
||||
"sourceApiBound": true,
|
||||
"representativeSliceOnly": true,
|
||||
"fullFamilyParity": false,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true,
|
||||
"deterministic": true,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P19-002"
|
||||
}
|
||||
64
tests/golden/WBV2-P19-001/object-parent-candidate-set.json
Normal file
64
tests/golden/WBV2-P19-001/object-parent-candidate-set.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-001",
|
||||
"operation": "OBJECT_PARENT_CANDIDATE_SELECTION",
|
||||
"status": "READY",
|
||||
"source": {
|
||||
"inventory": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"inventorySha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8",
|
||||
"api": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"apiSha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8",
|
||||
"client": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"clientSha256": "f6d9a8e0a16403bc6fb765195b8f1a619a28de7a75c59a412f1654d46e8ebc0b"
|
||||
},
|
||||
"candidate": {
|
||||
"capabilityId": "OBJECT_OPERATIONS.PARENT",
|
||||
"legacyId": "operator:object.parent_set",
|
||||
"legacyTask": "M16-GAP-01546",
|
||||
"behavior": {
|
||||
"capability": "OBJECT_OPERATIONS.PARENT",
|
||||
"operation": "setParent",
|
||||
"positive": [
|
||||
"parent-relation",
|
||||
"keep-transform",
|
||||
"undo",
|
||||
"redo",
|
||||
"save-reopen"
|
||||
],
|
||||
"negative": [
|
||||
"missing-parent-id",
|
||||
"cycle"
|
||||
],
|
||||
"browser": "chromium",
|
||||
"engine": "compiled-WASM-WebEngine-Main"
|
||||
},
|
||||
"behaviorHash": "14a34d128abfe68e090e6d00c8f0eb1a935c6ea7a7189faa5dbf855011c2de23",
|
||||
"dedupeKey": "OBJECT_OPERATIONS.PARENT|14a34d128abfe68e090e6d00c8f0eb1a935c6ea7a7189faa5dbf855011c2de23|8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8|f6d9a8e0a16403bc6fb765195b8f1a619a28de7a75c59a412f1654d46e8ebc0b",
|
||||
"sourceBacked": true,
|
||||
"chromiumProductionReady": true,
|
||||
"fullFamilyParity": false
|
||||
},
|
||||
"inventory": {
|
||||
"matchedEntries": 1,
|
||||
"pending": 1,
|
||||
"total": 6900,
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6614,
|
||||
"remainderExplicit": true
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"id": "operator:object.parent_set",
|
||||
"sourceTask": "M15-01B",
|
||||
"legacyState": "pending",
|
||||
"targetImplementationClass": "LOCAL_EXACT"
|
||||
}
|
||||
],
|
||||
"policy": {
|
||||
"sourceHistoryReadOnly": true,
|
||||
"representativeSliceOnly": true,
|
||||
"noRepeatedExecution": true,
|
||||
"duplicateValidationAvoided": true,
|
||||
"fullHistoricalReproduction": false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-001",
|
||||
"operation": "SELECT_OBJECT_PARENT_BATCH",
|
||||
"status": "PASS",
|
||||
"candidate": {
|
||||
"capabilityId": "OBJECT_OPERATIONS.PARENT",
|
||||
"legacyId": "operator:object.parent_set",
|
||||
"legacyTask": "M16-GAP-01546",
|
||||
"behavior": {
|
||||
"capability": "OBJECT_OPERATIONS.PARENT",
|
||||
"operation": "setParent",
|
||||
"positive": [
|
||||
"parent-relation",
|
||||
"keep-transform",
|
||||
"undo",
|
||||
"redo",
|
||||
"save-reopen"
|
||||
],
|
||||
"negative": [
|
||||
"missing-parent-id",
|
||||
"cycle"
|
||||
],
|
||||
"browser": "chromium",
|
||||
"engine": "compiled-WASM-WebEngine-Main"
|
||||
},
|
||||
"behaviorHash": "14a34d128abfe68e090e6d00c8f0eb1a935c6ea7a7189faa5dbf855011c2de23",
|
||||
"dedupeKey": "OBJECT_OPERATIONS.PARENT|14a34d128abfe68e090e6d00c8f0eb1a935c6ea7a7189faa5dbf855011c2de23|8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8|f6d9a8e0a16403bc6fb765195b8f1a619a28de7a75c59a412f1654d46e8ebc0b",
|
||||
"sourceBacked": true,
|
||||
"chromiumProductionReady": true,
|
||||
"fullFamilyParity": false
|
||||
},
|
||||
"inventory": {
|
||||
"matchedEntries": 1,
|
||||
"pending": 1,
|
||||
"total": 6900,
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6614,
|
||||
"remainderExplicit": true
|
||||
},
|
||||
"source": {
|
||||
"inventory": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"inventorySha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8",
|
||||
"api": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"apiSha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8",
|
||||
"client": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"clientSha256": "f6d9a8e0a16403bc6fb765195b8f1a619a28de7a75c59a412f1654d46e8ebc0b"
|
||||
},
|
||||
"matchedEntryDigest": "89b0826b28bd507703ea9ddee6b2fce2c75dfc31e2a8e4990117b7159525bf00",
|
||||
"efficiency": {
|
||||
"oneEntryScan": true,
|
||||
"existingEvidenceReused": true,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"nextTask": "WBV2-P19-002"
|
||||
}
|
||||
150
tests/golden/WBV2-P19-001/parent-task-plan.json
Normal file
150
tests/golden/WBV2-P19-001/parent-task-plan.json
Normal file
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_PARITY_V2_OBJECT_PARENT_EPOCH_1",
|
||||
"status": "ACTIVE_OBJECT_PARENT_QUEUE",
|
||||
"authority": "queue_reactivated_after_p18_create_gate",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"browserEvidence": [
|
||||
"chromium"
|
||||
],
|
||||
"forbiddenBrowsers": [
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mainAuthority": "blender_main",
|
||||
"reusePolicy": "source_hash_and_behavior_hash_deduplication"
|
||||
},
|
||||
"parentCreate": {
|
||||
"manifest": "tests/golden/WBV2-P18-003/manifest.json",
|
||||
"report": "tests/golden/WBV2-P18-003/object-create-gate-report.json",
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6614,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P19-000",
|
||||
"phase": "P19",
|
||||
"title": "authorize_object_parent_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P18-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-governance",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-000.md",
|
||||
"behavior": "Authorize one Object Parent behavior after the P18 create overlay.",
|
||||
"outputs": [
|
||||
"continuation root",
|
||||
"candidate scope",
|
||||
"hash boundary"
|
||||
],
|
||||
"acceptance": [
|
||||
"P18 overlay remains hash-bound",
|
||||
"setParent API is present",
|
||||
"one production task is active"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-001",
|
||||
"phase": "P19",
|
||||
"title": "select_object_parent_batch",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.PARENT",
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-selection",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-001.md",
|
||||
"behavior": "Select setParent as one unique Object Operations behavior.",
|
||||
"outputs": [
|
||||
"candidate report",
|
||||
"behavior hash",
|
||||
"dedupe key"
|
||||
],
|
||||
"acceptance": [
|
||||
"source command is hash-bound",
|
||||
"create/duplicate evidence is not rerun",
|
||||
"one legacy operator binding is selected"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-002",
|
||||
"phase": "P19",
|
||||
"title": "object_parent_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.PARENT",
|
||||
"implementationClass": "LOCAL_EXACT",
|
||||
"parallelGroup": "p19-object",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-002.md",
|
||||
"behavior": "Bind setParent, undo/redo, malformed rejection, and exact save/reopen to compiled WASM Main in Chromium.",
|
||||
"outputs": [
|
||||
"parent production report",
|
||||
"parent receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"parent relation changes",
|
||||
"undo/redo revisions are sequential",
|
||||
"malformed parent input fails closed",
|
||||
"save/reopen is exact"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-003",
|
||||
"phase": "P19",
|
||||
"title": "close_object_parent_gate",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-release",
|
||||
"gate": "G5",
|
||||
"card": "docs/tasks/WBV2-P19-003.md",
|
||||
"behavior": "Close the setParent gate and graduate only the exact operator binding.",
|
||||
"outputs": [
|
||||
"object parent gate",
|
||||
"completion overlay",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"only object parent is claimed",
|
||||
"effective inventory remains explicit",
|
||||
"no duplicate validation or historical over-claim"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
],
|
||||
"parentRecoveryPlan": {
|
||||
"path": "tests/golden/WBV2-P19-000/parent-task-plan.json",
|
||||
"sha256": "d0e129c85f428eeeae328613a633220b9c431c08d9cce55626521f25b22374e6"
|
||||
}
|
||||
}
|
||||
171
tests/golden/WBV2-P19-001/task-context.json
Normal file
171
tests/golden/WBV2-P19-001/task-context.json
Normal file
@@ -0,0 +1,171 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-001",
|
||||
"parentTask": "WBV2-P19-000",
|
||||
"status": "in_progress",
|
||||
"goal": "Select setParent as one unique Object Operations behavior.",
|
||||
"scope": {
|
||||
"gap": "capability:OBJECT_OPERATIONS.PARENT",
|
||||
"ownerFamily": "PARITY",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P19-001 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 3531,
|
||||
"contextRemainingTokens": 881
|
||||
},
|
||||
"source": {
|
||||
"bytes": 6373,
|
||||
"tokens": 1595
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"bytes": 126797,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "web/app/src/engine-client/WebEngineClient.ts",
|
||||
"bytes": 16197,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"bytes": 5053386,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-001/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P19-001.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-001/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"source command is hash-bound",
|
||||
"create/duplicate evidence is not rerun",
|
||||
"one legacy operator binding is selected"
|
||||
],
|
||||
"nextTask": "WBV2-P19-002",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P19-001.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P19-000/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P19-000.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P19-001.md",
|
||||
"tests/golden/WBV2-P19-000/manifest.json",
|
||||
"docs/status/WBV2-P19-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-P19-000",
|
||||
"parentTask": "WBV2-P18-003",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P19-001",
|
||||
"artifactCount": 9
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P19-000 status",
|
||||
"- task: `WBV2-P19-000`; parent: `WBV2-P18-003`; status: `done`",
|
||||
"- candidate: `OBJECT_OPERATIONS.PARENT`; source API is present",
|
||||
"- effective inventory carried forward: `285` completed, `6614` pending",
|
||||
"- duplicate validation: `forbidden`; representative slice only",
|
||||
"- nextTask: `WBV2-P19-001`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1078,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 35,
|
||||
"taskTokens": 270
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P19-001.md",
|
||||
"bytes": 1078,
|
||||
"lines": 35,
|
||||
"tokens": 270
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-000/manifest.json",
|
||||
"bytes": 2182,
|
||||
"lines": 61,
|
||||
"tokens": 546
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P19-000.md",
|
||||
"bytes": 310,
|
||||
"lines": 8,
|
||||
"tokens": 78
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1595,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1595,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2619,
|
||||
"serializedContextTokens": 592,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
78
tests/golden/WBV2-P19-002/manifest.json
Normal file
78
tests/golden/WBV2-P19-002/manifest.json
Normal file
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-002",
|
||||
"parentTask": "WBV2-P19-001",
|
||||
"operation": "OBJECT_PARENT_ENGINE_RECEIPT",
|
||||
"status": "done",
|
||||
"enablingTask": false,
|
||||
"parityStateChange": true,
|
||||
"runtime": "PLAYWRIGHT_CHROMIUM_WEBENGINE_WASM",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P19-001/manifest.json",
|
||||
"sha256": "a717bf3ae3a63c0c123aa932618c13ed35d2518b801bc266e96d11b29abf98fe"
|
||||
},
|
||||
"selection": {
|
||||
"path": "tests/golden/WBV2-P19-001/object-parent-selection-report.json",
|
||||
"sha256": "ba9960c1aed7f0da68c1198dfbd926d39aed53c6d7421db7da0fe1089434d66b"
|
||||
},
|
||||
"api": {
|
||||
"path": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"sha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8"
|
||||
},
|
||||
"test": {
|
||||
"path": "web/tests/e2e/wbv2-object-parent-production.spec.ts",
|
||||
"sha256": "391921664bc608cff5a34ca978be6132588bf26c09b21aec5cd8ef885f6c029d"
|
||||
},
|
||||
"fixture": {
|
||||
"path": "tests/files/web/basic_scene.blend",
|
||||
"sha256": "6fcc55bda74da8c95da96ba068b60339bf60ca44147ff8000fbb95d296db2a73"
|
||||
},
|
||||
"production": {
|
||||
"path": "tests/golden/WBV2-P19-002/object-parent-production.json",
|
||||
"sha256": "4c0d5dbda9d2157b281ad35e1ab1fac6f65e7a4b0533ca597932f11b53a13f0a"
|
||||
},
|
||||
"secondProduction": {
|
||||
"path": "tests/golden/WBV2-P19-002/object-parent-production.second.json",
|
||||
"sha256": "4c0d5dbda9d2157b281ad35e1ab1fac6f65e7a4b0533ca597932f11b53a13f0a"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P19-002/object-parent-receipt-report.json",
|
||||
"sha256": "a76479b66bc542c293d6ada71251e89ba941d8decb9475d60c4aee8c2890f32c"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generate-wbv2-parent-receipt.mjs",
|
||||
"sha256": "e037f3a3e9fa6246a118c99ab17ba70ba77b9e12f08cdca695a2cc2b1027d8b2"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P19-002.md",
|
||||
"sha256": "03065ee37888c05341c058228f25b2c0e7fcdc3dfc96d262698ffdb6ace9a0b3"
|
||||
},
|
||||
"parityPlan": {
|
||||
"path": "tests/golden/WBV2-P19-002/parent-task-plan.json",
|
||||
"sha256": "66bb310caceed1209d76d417bc4f3724be236e5502e74a49aa1a5c3b9aab69a0"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P19-002/task-context.json",
|
||||
"sha256": "f30d5acb2367e5a29b44c007195d4625e8a7f4dad797e6c457fbf668567fc094"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"exactInventoryBindings": 1,
|
||||
"boundInventoryIds": [
|
||||
"operator:object.parent_set"
|
||||
],
|
||||
"parentRelationChanged": true,
|
||||
"undoRedoSequential": true,
|
||||
"malformedRejected": true,
|
||||
"saveReopen": "EXACT",
|
||||
"deterministic": true,
|
||||
"representativeSliceOnly": true,
|
||||
"fullFamilyParity": false,
|
||||
"inventoryTotal": 6900,
|
||||
"baseInventoryPending": 6618,
|
||||
"effectivePending": 6614,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P19-003"
|
||||
}
|
||||
23
tests/golden/WBV2-P19-002/object-parent-production.json
Normal file
23
tests/golden/WBV2-P19-002/object-parent-production.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-002",
|
||||
"operation": "OBJECT_PARENT_ENGINE_CHROMIUM",
|
||||
"queueMutation": false,
|
||||
"fixtureSha256": "6fcc55bda74da8c95da96ba068b60339bf60ca44147ff8000fbb95d296db2a73",
|
||||
"browser": "chromium",
|
||||
"baseRevision": 1,
|
||||
"childId": "object:BasicArea",
|
||||
"parentId": "object:BasicCamera",
|
||||
"parentAfter": "object:BasicCamera",
|
||||
"createRevision": 2,
|
||||
"undoRevision": 3,
|
||||
"redoRevision": 4,
|
||||
"malformed": {
|
||||
"code": "INVALID_ARGUMENT",
|
||||
"message": "setParent requires editable existing objects"
|
||||
},
|
||||
"malformedRevisionPreserved": true,
|
||||
"reopenedParent": "object:BasicCamera",
|
||||
"reopenedRevision": 1,
|
||||
"savedSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-002",
|
||||
"operation": "OBJECT_PARENT_ENGINE_CHROMIUM",
|
||||
"queueMutation": false,
|
||||
"fixtureSha256": "6fcc55bda74da8c95da96ba068b60339bf60ca44147ff8000fbb95d296db2a73",
|
||||
"browser": "chromium",
|
||||
"baseRevision": 1,
|
||||
"childId": "object:BasicArea",
|
||||
"parentId": "object:BasicCamera",
|
||||
"parentAfter": "object:BasicCamera",
|
||||
"createRevision": 2,
|
||||
"undoRevision": 3,
|
||||
"redoRevision": 4,
|
||||
"malformed": {
|
||||
"code": "INVALID_ARGUMENT",
|
||||
"message": "setParent requires editable existing objects"
|
||||
},
|
||||
"malformedRevisionPreserved": true,
|
||||
"reopenedParent": "object:BasicCamera",
|
||||
"reopenedRevision": 1,
|
||||
"savedSha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
}
|
||||
64
tests/golden/WBV2-P19-002/object-parent-receipt-report.json
Normal file
64
tests/golden/WBV2-P19-002/object-parent-receipt-report.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-002",
|
||||
"operation": "OBJECT_PARENT_ENGINE_RECEIPT",
|
||||
"status": "PASS",
|
||||
"browser": "chromium",
|
||||
"queueMutation": false,
|
||||
"source": {
|
||||
"manifest": "tests/golden/WBV2-P19-001/manifest.json",
|
||||
"manifestSha256": "a717bf3ae3a63c0c123aa932618c13ed35d2518b801bc266e96d11b29abf98fe",
|
||||
"selection": "tests/golden/WBV2-P19-001/object-parent-selection-report.json",
|
||||
"selectionSha256": "ba9960c1aed7f0da68c1198dfbd926d39aed53c6d7421db7da0fe1089434d66b",
|
||||
"api": "blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
|
||||
"apiSha256": "8fa70dc7605e66393482e661e5987a8443dded56ab0092aeb977b40ae49888f8",
|
||||
"test": "web/tests/e2e/wbv2-object-parent-production.spec.ts",
|
||||
"testSha256": "391921664bc608cff5a34ca978be6132588bf26c09b21aec5cd8ef885f6c029d",
|
||||
"fixture": "tests/files/web/basic_scene.blend",
|
||||
"fixtureSha256": "6fcc55bda74da8c95da96ba068b60339bf60ca44147ff8000fbb95d296db2a73"
|
||||
},
|
||||
"production": {
|
||||
"report": "tests/golden/WBV2-P19-002/object-parent-production.json",
|
||||
"reportSha256": "4c0d5dbda9d2157b281ad35e1ab1fac6f65e7a4b0533ca597932f11b53a13f0a",
|
||||
"secondReport": "tests/golden/WBV2-P19-002/object-parent-production.second.json",
|
||||
"secondReportSha256": "4c0d5dbda9d2157b281ad35e1ab1fac6f65e7a4b0533ca597932f11b53a13f0a",
|
||||
"deterministic": true,
|
||||
"childId": "object:BasicArea",
|
||||
"parentId": "object:BasicCamera",
|
||||
"revisions": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"malformed": {
|
||||
"code": "INVALID_ARGUMENT",
|
||||
"message": "setParent requires editable existing objects"
|
||||
},
|
||||
"malformedRevisionPreserved": true,
|
||||
"reopenedParent": "object:BasicCamera",
|
||||
"reopenedRevision": 1,
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"inventoryBindings": [
|
||||
{
|
||||
"id": "operator:object.parent_set",
|
||||
"evidence": "setParent",
|
||||
"exact": true,
|
||||
"reason": "bounded protocol command persists a parent relation"
|
||||
}
|
||||
],
|
||||
"assertions": {
|
||||
"parentRelationChanged": true,
|
||||
"undoRedoSequential": true,
|
||||
"malformedRejected": true,
|
||||
"mainUnchangedOnMalformed": true,
|
||||
"saveReopenExact": true,
|
||||
"deterministic": true,
|
||||
"inventoryBindingsExact": true,
|
||||
"representativeSliceOnly": true,
|
||||
"fullFamilyParity": false,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P19-003"
|
||||
}
|
||||
150
tests/golden/WBV2-P19-002/parent-task-plan.json
Normal file
150
tests/golden/WBV2-P19-002/parent-task-plan.json
Normal file
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_PARITY_V2_OBJECT_PARENT_EPOCH_1",
|
||||
"status": "ACTIVE_OBJECT_PARENT_QUEUE",
|
||||
"authority": "queue_reactivated_after_p18_create_gate",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"browserEvidence": [
|
||||
"chromium"
|
||||
],
|
||||
"forbiddenBrowsers": [
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mainAuthority": "blender_main",
|
||||
"reusePolicy": "source_hash_and_behavior_hash_deduplication"
|
||||
},
|
||||
"parentCreate": {
|
||||
"manifest": "tests/golden/WBV2-P18-003/manifest.json",
|
||||
"report": "tests/golden/WBV2-P18-003/object-create-gate-report.json",
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6614,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P19-000",
|
||||
"phase": "P19",
|
||||
"title": "authorize_object_parent_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P18-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-governance",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-000.md",
|
||||
"behavior": "Authorize one Object Parent behavior after the P18 create overlay.",
|
||||
"outputs": [
|
||||
"continuation root",
|
||||
"candidate scope",
|
||||
"hash boundary"
|
||||
],
|
||||
"acceptance": [
|
||||
"P18 overlay remains hash-bound",
|
||||
"setParent API is present",
|
||||
"one production task is active"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-001",
|
||||
"phase": "P19",
|
||||
"title": "select_object_parent_batch",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.PARENT",
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-selection",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-001.md",
|
||||
"behavior": "Select setParent as one unique Object Operations behavior.",
|
||||
"outputs": [
|
||||
"candidate report",
|
||||
"behavior hash",
|
||||
"dedupe key"
|
||||
],
|
||||
"acceptance": [
|
||||
"source command is hash-bound",
|
||||
"create/duplicate evidence is not rerun",
|
||||
"one legacy operator binding is selected"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-002",
|
||||
"phase": "P19",
|
||||
"title": "object_parent_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.PARENT",
|
||||
"implementationClass": "LOCAL_EXACT",
|
||||
"parallelGroup": "p19-object",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-002.md",
|
||||
"behavior": "Bind setParent, undo/redo, malformed rejection, and exact save/reopen to compiled WASM Main in Chromium.",
|
||||
"outputs": [
|
||||
"parent production report",
|
||||
"parent receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"parent relation changes",
|
||||
"undo/redo revisions are sequential",
|
||||
"malformed parent input fails closed",
|
||||
"save/reopen is exact"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-003",
|
||||
"phase": "P19",
|
||||
"title": "close_object_parent_gate",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-release",
|
||||
"gate": "G5",
|
||||
"card": "docs/tasks/WBV2-P19-003.md",
|
||||
"behavior": "Close the setParent gate and graduate only the exact operator binding.",
|
||||
"outputs": [
|
||||
"object parent gate",
|
||||
"completion overlay",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"only object parent is claimed",
|
||||
"effective inventory remains explicit",
|
||||
"no duplicate validation or historical over-claim"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
],
|
||||
"parentRecoveryPlan": {
|
||||
"path": "tests/golden/WBV2-P19-001/parent-task-plan.json",
|
||||
"sha256": "c9822702d3b3fb5bb5b1eed958a93baf4d43820f18b95fe835cb8ebddd472ff5"
|
||||
}
|
||||
}
|
||||
170
tests/golden/WBV2-P19-002/task-context.json
Normal file
170
tests/golden/WBV2-P19-002/task-context.json
Normal file
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-002",
|
||||
"parentTask": "WBV2-P19-001",
|
||||
"status": "in_progress",
|
||||
"goal": "Bind setParent, undo/redo, malformed rejection, and exact save/reopen to compiled WASM Main in Chromium.",
|
||||
"scope": {
|
||||
"gap": "capability:OBJECT_OPERATIONS.PARENT",
|
||||
"ownerFamily": "OBJECT",
|
||||
"implementationClass": "LOCAL_EXACT"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P19-002 --write"
|
||||
],
|
||||
"inputPaths": [
|
||||
"tests/golden/WBV2-P19-001/object-parent-selection-report.json"
|
||||
],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 3149,
|
||||
"contextRemainingTokens": 786
|
||||
},
|
||||
"source": {
|
||||
"bytes": 6755,
|
||||
"tokens": 1690
|
||||
},
|
||||
"selected": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-001/object-parent-selection-report.json",
|
||||
"bytes": 2033,
|
||||
"tokens": 509
|
||||
}
|
||||
],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "web/tests/e2e/wbv2-object-parent-production.spec.ts",
|
||||
"bytes": 3808,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-002/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P19-002.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-002/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 1,
|
||||
"bytes": 2033,
|
||||
"tokens": 509
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"parent relation changes",
|
||||
"undo/redo revisions are sequential",
|
||||
"malformed parent input fails closed",
|
||||
"save/reopen is exact"
|
||||
],
|
||||
"nextTask": "WBV2-P19-003",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P19-002.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P19-001/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P19-001.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P19-002.md",
|
||||
"tests/golden/WBV2-P19-001/manifest.json",
|
||||
"docs/status/WBV2-P19-001.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-001",
|
||||
"parentTask": "WBV2-P19-000",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P19-002",
|
||||
"artifactCount": 10
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P19-001 status",
|
||||
"- task: `WBV2-P19-001`; parent: `WBV2-P19-000`; status: `done`",
|
||||
"- selected behavior: `setParent`; exact candidate: `operator:object.parent_set`",
|
||||
"- base inventory: `6900` total, `6618` pending; effective carried overlay: `6614` pending",
|
||||
"- behavior hash: `14a34d128abfe68e090e6d00c8f0eb1a935c6ea7a7189faa5dbf855011c2de23`; duplicate validation: `forbidden`",
|
||||
"- nextTask: `WBV2-P19-002`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1108,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 35,
|
||||
"taskTokens": 277
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P19-002.md",
|
||||
"bytes": 1108,
|
||||
"lines": 35,
|
||||
"tokens": 277
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-001/manifest.json",
|
||||
"bytes": 2442,
|
||||
"lines": 68,
|
||||
"tokens": 611
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P19-001.md",
|
||||
"bytes": 402,
|
||||
"lines": 8,
|
||||
"tokens": 101
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1690,
|
||||
"evidenceFiles": 1,
|
||||
"evidenceBytes": 2033,
|
||||
"evidenceTokens": 509,
|
||||
"totalTokens": 2199,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3223,
|
||||
"serializedContextTokens": 665,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
100
tests/golden/WBV2-P19-003/inventory-completion-overlay.json
Normal file
100
tests/golden/WBV2-P19-003/inventory-completion-overlay.json
Normal file
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-003",
|
||||
"operation": "INVENTORY_COMPLETION_OVERLAY",
|
||||
"status": "PASS",
|
||||
"baseInventory": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8",
|
||||
"total": 6900,
|
||||
"pending": 6618
|
||||
},
|
||||
"previousOverlay": {
|
||||
"path": "tests/golden/WBV2-P18-003/inventory-completion-overlay.json",
|
||||
"sha256": "75b6fb36961e215e3c121e4a1dc6fdcd8d0fd786279b24d2e8d9b4ab0cf00da1",
|
||||
"effectiveCompleted": 285,
|
||||
"effectivePending": 6614
|
||||
},
|
||||
"completionEvidence": {
|
||||
"receipt": "tests/golden/WBV2-P19-002/object-parent-receipt-report.json",
|
||||
"receiptSha256": "a76479b66bc542c293d6ada71251e89ba941d8decb9475d60c4aee8c2890f32c",
|
||||
"deterministic": true,
|
||||
"chromium": true,
|
||||
"wasmMain": true,
|
||||
"saveReopen": "EXACT"
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"id": "operator:paint.vertex_color_set",
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"sourceReceipt": "tests/golden/WBV2-P16-002/paint-attributes-receipt-report.json",
|
||||
"sourceReceiptSha256": "055531f8496d9f740c3d8b47456c7f426daece27e3a8272fb1c8e650c8c80c3a",
|
||||
"evidence": "setVertexColors",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:paint.weight_set",
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"sourceReceipt": "tests/golden/WBV2-P16-002/paint-attributes-receipt-report.json",
|
||||
"sourceReceiptSha256": "055531f8496d9f740c3d8b47456c7f426daece27e3a8272fb1c8e650c8c80c3a",
|
||||
"evidence": "setVertexWeights",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:paint.vertex_color_set",
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"sourceReceipt": "tests/golden/WBV2-P16-002/paint-attributes-receipt-report.json",
|
||||
"sourceReceiptSha256": "055531f8496d9f740c3d8b47456c7f426daece27e3a8272fb1c8e650c8c80c3a",
|
||||
"evidence": "setVertexColors",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:paint.weight_set",
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"sourceReceipt": "tests/golden/WBV2-P16-002/paint-attributes-receipt-report.json",
|
||||
"sourceReceiptSha256": "055531f8496d9f740c3d8b47456c7f426daece27e3a8272fb1c8e650c8c80c3a",
|
||||
"evidence": "setVertexWeights",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:object.duplicate",
|
||||
"capabilityId": "CAP-OBJECT-OPERATIONS",
|
||||
"sourceReceipt": "tests/golden/WBV2-P17-002/object-duplicate-receipt-report.json",
|
||||
"sourceReceiptSha256": "daa20107e07ae97b0cfc4ee21be683d729230ea32850a004ca4d14c20ff4b776",
|
||||
"evidence": "duplicateObject",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:object.add",
|
||||
"capabilityId": "CAP-OBJECT-OPERATIONS",
|
||||
"sourceReceipt": "tests/golden/WBV2-P18-002/object-create-receipt-report.json",
|
||||
"sourceReceiptSha256": "a18b92a2cd114caf68c9af477ba9e01a34852b64e2911b6c69777cab8846c2d3",
|
||||
"evidence": "createPrimitive(CUBE)",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:object.parent_set",
|
||||
"capabilityId": "CAP-OBJECT-OPERATIONS",
|
||||
"sourceReceipt": "tests/golden/WBV2-P19-002/object-parent-receipt-report.json",
|
||||
"sourceReceiptSha256": "a76479b66bc542c293d6ada71251e89ba941d8decb9475d60c4aee8c2890f32c",
|
||||
"evidence": "setParent",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
}
|
||||
],
|
||||
"summary": {
|
||||
"newlyVerifiedEntries": 1,
|
||||
"effectiveCompleted": 286,
|
||||
"effectivePending": 6613,
|
||||
"claimedComplete": 5,
|
||||
"basePendingPreserved": true,
|
||||
"fullFamilyParity": false,
|
||||
"historicalReproduction": false
|
||||
}
|
||||
}
|
||||
72
tests/golden/WBV2-P19-003/manifest.json
Normal file
72
tests/golden/WBV2-P19-003/manifest.json
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-003",
|
||||
"parentTask": "WBV2-P19-002",
|
||||
"operation": "CLOSE_OBJECT_PARENT_GATE",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": true,
|
||||
"runtime": "READ_ONLY_OBJECT_PARENT_GATE_WITH_COMPLETION_OVERLAY",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P19-002/manifest.json",
|
||||
"sha256": "cf3f82384a4c3b9aa99d8c031c2501827b820ce0e3e991005d3e80d100165c67"
|
||||
},
|
||||
"receipt": {
|
||||
"path": "tests/golden/WBV2-P19-002/object-parent-receipt-report.json",
|
||||
"sha256": "a76479b66bc542c293d6ada71251e89ba941d8decb9475d60c4aee8c2890f32c"
|
||||
},
|
||||
"previousOverlay": {
|
||||
"path": "tests/golden/WBV2-P18-003/inventory-completion-overlay.json",
|
||||
"sha256": "75b6fb36961e215e3c121e4a1dc6fdcd8d0fd786279b24d2e8d9b4ab0cf00da1"
|
||||
},
|
||||
"baseInventory": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8"
|
||||
},
|
||||
"overlay": {
|
||||
"path": "tests/golden/WBV2-P19-003/inventory-completion-overlay.json",
|
||||
"sha256": "0eb80360ebf1fe76bd3d42e4f5034e687369ec78039c5fb32b3e16ad5a3aaf6d"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P19-003/object-parent-gate-report.json",
|
||||
"sha256": "abd7a7ec978590b70ba2059022a96c991e63e8c0b716c8e277b64060a93e7d54"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generate-wbv2-parent-gate.mjs",
|
||||
"sha256": "dfdcbe7ce37354a043ae796d81b7a6438c9e2867093d45e42eea498e56cee046"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P19-003.md",
|
||||
"sha256": "b956148ed06e2e817156cab6621ed2b9e2fb91cba171dcaee3bf48a441e18f82"
|
||||
},
|
||||
"parityPlan": {
|
||||
"path": "tests/golden/WBV2-P19-003/parent-task-plan.json",
|
||||
"sha256": "83444c65311eff4430462658c9d4e4219a597347541c42266fee8f9c8647d138"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P19-003/task-context.json",
|
||||
"sha256": "ecdc31873c1fab555c7c99388b23ac1ecde65c1f343483ad92168a2466ad3bd5"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"totalFeatureClaims": 4,
|
||||
"newObjectParentClaims": 1,
|
||||
"exactInventoryBindings": 1,
|
||||
"effectiveCompleted": 286,
|
||||
"effectivePending": 6613,
|
||||
"baseInventoryCompleted": 281,
|
||||
"baseInventoryPending": 6618,
|
||||
"claimedCompleteOverlay": 5,
|
||||
"uniqueBehaviorRuns": 5,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true,
|
||||
"baseInventoryUntouched": true,
|
||||
"provenanceEpoch": 2,
|
||||
"authorizedRebaselineOnly": true,
|
||||
"fullHistoricalReproduction": false,
|
||||
"deterministic": true
|
||||
},
|
||||
"nextTask": null
|
||||
}
|
||||
155
tests/golden/WBV2-P19-003/object-parent-gate-report.json
Normal file
155
tests/golden/WBV2-P19-003/object-parent-gate-report.json
Normal file
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-003",
|
||||
"operation": "CLOSE_OBJECT_PARENT_GATE",
|
||||
"status": "PASS",
|
||||
"decision": {
|
||||
"status": "READY_WITH_OBJECT_PARENT_SLICE_AND_INVENTORY_OVERLAY",
|
||||
"code": "OBJECT_PARENT_AUTHORIZED_REBASELINE",
|
||||
"featureParityClaims": [
|
||||
"SCULPT.PAINT_ATTRIBUTES",
|
||||
"OBJECT_OPERATIONS.DUPLICATE",
|
||||
"OBJECT_OPERATIONS.CREATE",
|
||||
"OBJECT_OPERATIONS.PARENT"
|
||||
],
|
||||
"featureParityClaimCount": 4,
|
||||
"newFeatureClaim": "OBJECT_OPERATIONS.PARENT",
|
||||
"newlyVerifiedInventoryEntries": 1,
|
||||
"baseInventoryPending": 6618,
|
||||
"effectivePending": 6613,
|
||||
"effectiveCompleted": 286,
|
||||
"claimedCompleteOverlay": 5,
|
||||
"fullFamilyParity": false,
|
||||
"engineBound": true,
|
||||
"browser": "chromium",
|
||||
"provenanceEpoch": 2,
|
||||
"releaseScope": "AUTHORIZED_REBASELINE_ONLY",
|
||||
"fullHistoricalReproduction": false,
|
||||
"inventoryTotal": 6900
|
||||
},
|
||||
"evidence": {
|
||||
"receipt": {
|
||||
"path": "tests/golden/WBV2-P19-002/object-parent-receipt-report.json",
|
||||
"sha256": "a76479b66bc542c293d6ada71251e89ba941d8decb9475d60c4aee8c2890f32c",
|
||||
"bindings": [
|
||||
{
|
||||
"id": "operator:object.parent_set",
|
||||
"evidence": "setParent",
|
||||
"exact": true,
|
||||
"reason": "bounded protocol command persists a parent relation"
|
||||
}
|
||||
]
|
||||
},
|
||||
"overlay": {
|
||||
"path": "tests/golden/WBV2-P19-003/inventory-completion-overlay.json",
|
||||
"sha256": "0eb80360ebf1fe76bd3d42e4f5034e687369ec78039c5fb32b3e16ad5a3aaf6d",
|
||||
"entries": [
|
||||
{
|
||||
"id": "operator:paint.vertex_color_set",
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"sourceReceipt": "tests/golden/WBV2-P16-002/paint-attributes-receipt-report.json",
|
||||
"sourceReceiptSha256": "055531f8496d9f740c3d8b47456c7f426daece27e3a8272fb1c8e650c8c80c3a",
|
||||
"evidence": "setVertexColors",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:paint.weight_set",
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"sourceReceipt": "tests/golden/WBV2-P16-002/paint-attributes-receipt-report.json",
|
||||
"sourceReceiptSha256": "055531f8496d9f740c3d8b47456c7f426daece27e3a8272fb1c8e650c8c80c3a",
|
||||
"evidence": "setVertexWeights",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:paint.vertex_color_set",
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"sourceReceipt": "tests/golden/WBV2-P16-002/paint-attributes-receipt-report.json",
|
||||
"sourceReceiptSha256": "055531f8496d9f740c3d8b47456c7f426daece27e3a8272fb1c8e650c8c80c3a",
|
||||
"evidence": "setVertexColors",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:paint.weight_set",
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"sourceReceipt": "tests/golden/WBV2-P16-002/paint-attributes-receipt-report.json",
|
||||
"sourceReceiptSha256": "055531f8496d9f740c3d8b47456c7f426daece27e3a8272fb1c8e650c8c80c3a",
|
||||
"evidence": "setVertexWeights",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:object.duplicate",
|
||||
"capabilityId": "CAP-OBJECT-OPERATIONS",
|
||||
"sourceReceipt": "tests/golden/WBV2-P17-002/object-duplicate-receipt-report.json",
|
||||
"sourceReceiptSha256": "daa20107e07ae97b0cfc4ee21be683d729230ea32850a004ca4d14c20ff4b776",
|
||||
"evidence": "duplicateObject",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:object.add",
|
||||
"capabilityId": "CAP-OBJECT-OPERATIONS",
|
||||
"sourceReceipt": "tests/golden/WBV2-P18-002/object-create-receipt-report.json",
|
||||
"sourceReceiptSha256": "a18b92a2cd114caf68c9af477ba9e01a34852b64e2911b6c69777cab8846c2d3",
|
||||
"evidence": "createPrimitive(CUBE)",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
},
|
||||
{
|
||||
"id": "operator:object.parent_set",
|
||||
"capabilityId": "CAP-OBJECT-OPERATIONS",
|
||||
"sourceReceipt": "tests/golden/WBV2-P19-002/object-parent-receipt-report.json",
|
||||
"sourceReceiptSha256": "a76479b66bc542c293d6ada71251e89ba941d8decb9475d60c4aee8c2890f32c",
|
||||
"evidence": "setParent",
|
||||
"exact": true,
|
||||
"historicalRestoration": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"previousOverlay": {
|
||||
"path": "tests/golden/WBV2-P18-003/inventory-completion-overlay.json",
|
||||
"sha256": "75b6fb36961e215e3c121e4a1dc6fdcd8d0fd786279b24d2e8d9b4ab0cf00da1"
|
||||
},
|
||||
"baseInventory": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8",
|
||||
"pending": 6618
|
||||
}
|
||||
},
|
||||
"efficiency": {
|
||||
"uniqueBehaviorRuns": 5,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true,
|
||||
"baseInventoryUntouched": true
|
||||
},
|
||||
"coverage": {
|
||||
"baseTotal": 6900,
|
||||
"baseCompleted": 281,
|
||||
"basePending": 6618,
|
||||
"overlayCompleted": 5,
|
||||
"effectiveCompleted": 286,
|
||||
"effectivePending": 6613
|
||||
},
|
||||
"negative": {
|
||||
"missingReceipt": "REJECTED",
|
||||
"receiptHashDrift": "REJECTED",
|
||||
"nonChromium": "REJECTED",
|
||||
"nonExactSaveReopen": "REJECTED",
|
||||
"representativeAsFullFamily": "REJECTED",
|
||||
"historicalRestorationClaim": "REJECTED"
|
||||
},
|
||||
"policy": {
|
||||
"sourceHistoryReadOnly": true,
|
||||
"authorizedRebaselineOnly": true,
|
||||
"overlayOnlyCompletion": true,
|
||||
"baseInventoryPreserved": true,
|
||||
"inventoryRemainderExplicit": true,
|
||||
"noFalseLocalParity": true,
|
||||
"terminalQueuePointer": true
|
||||
},
|
||||
"nextTask": null
|
||||
}
|
||||
150
tests/golden/WBV2-P19-003/parent-task-plan.json
Normal file
150
tests/golden/WBV2-P19-003/parent-task-plan.json
Normal file
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_PARITY_V2_OBJECT_PARENT_EPOCH_1",
|
||||
"status": "COMPLETED_WITH_OBJECT_PARENT_SLICE",
|
||||
"authority": "queue_reactivated_after_p18_create_gate",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"browserEvidence": [
|
||||
"chromium"
|
||||
],
|
||||
"forbiddenBrowsers": [
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mainAuthority": "blender_main",
|
||||
"reusePolicy": "source_hash_and_behavior_hash_deduplication"
|
||||
},
|
||||
"parentCreate": {
|
||||
"manifest": "tests/golden/WBV2-P18-003/manifest.json",
|
||||
"report": "tests/golden/WBV2-P18-003/object-create-gate-report.json",
|
||||
"basePending": 6618,
|
||||
"effectivePending": 6614,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P19-000",
|
||||
"phase": "P19",
|
||||
"title": "authorize_object_parent_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P18-003"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-governance",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-000.md",
|
||||
"behavior": "Authorize one Object Parent behavior after the P18 create overlay.",
|
||||
"outputs": [
|
||||
"continuation root",
|
||||
"candidate scope",
|
||||
"hash boundary"
|
||||
],
|
||||
"acceptance": [
|
||||
"P18 overlay remains hash-bound",
|
||||
"setParent API is present",
|
||||
"one production task is active"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-001",
|
||||
"phase": "P19",
|
||||
"title": "select_object_parent_batch",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-000"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.PARENT",
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-selection",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-001.md",
|
||||
"behavior": "Select setParent as one unique Object Operations behavior.",
|
||||
"outputs": [
|
||||
"candidate report",
|
||||
"behavior hash",
|
||||
"dedupe key"
|
||||
],
|
||||
"acceptance": [
|
||||
"source command is hash-bound",
|
||||
"create/duplicate evidence is not rerun",
|
||||
"one legacy operator binding is selected"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-002",
|
||||
"phase": "P19",
|
||||
"title": "object_parent_engine_receipt",
|
||||
"kind": "feature",
|
||||
"owner": "OBJECT",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-001"
|
||||
],
|
||||
"parityId": "OBJECT_OPERATIONS.PARENT",
|
||||
"implementationClass": "LOCAL_EXACT",
|
||||
"parallelGroup": "p19-object",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P19-002.md",
|
||||
"behavior": "Bind setParent, undo/redo, malformed rejection, and exact save/reopen to compiled WASM Main in Chromium.",
|
||||
"outputs": [
|
||||
"parent production report",
|
||||
"parent receipt",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"parent relation changes",
|
||||
"undo/redo revisions are sequential",
|
||||
"malformed parent input fails closed",
|
||||
"save/reopen is exact"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P19-003",
|
||||
"phase": "P19",
|
||||
"title": "close_object_parent_gate",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P19-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p19-release",
|
||||
"gate": "G5",
|
||||
"card": "docs/tasks/WBV2-P19-003.md",
|
||||
"behavior": "Close the setParent gate and graduate only the exact operator binding.",
|
||||
"outputs": [
|
||||
"object parent gate",
|
||||
"completion overlay",
|
||||
"manifest"
|
||||
],
|
||||
"acceptance": [
|
||||
"only object parent is claimed",
|
||||
"effective inventory remains explicit",
|
||||
"no duplicate validation or historical over-claim"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
],
|
||||
"parentRecoveryPlan": {
|
||||
"path": "tests/golden/WBV2-P19-002/parent-task-plan.json",
|
||||
"sha256": "66bb310caceed1209d76d417bc4f3724be236e5502e74a49aa1a5c3b9aab69a0"
|
||||
}
|
||||
}
|
||||
170
tests/golden/WBV2-P19-003/task-context.json
Normal file
170
tests/golden/WBV2-P19-003/task-context.json
Normal file
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-003",
|
||||
"parentTask": "WBV2-P19-002",
|
||||
"status": "in_progress",
|
||||
"goal": "Close the setParent gate and graduate only the exact operator binding.",
|
||||
"scope": {
|
||||
"gap": "workflow:close_object_parent_gate",
|
||||
"ownerFamily": "RELEASE",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P19-003 --write"
|
||||
],
|
||||
"inputPaths": [
|
||||
"tests/golden/WBV2-P19-002/object-parent-receipt-report.json"
|
||||
],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2717,
|
||||
"contextRemainingTokens": 677
|
||||
},
|
||||
"source": {
|
||||
"bytes": 7187,
|
||||
"tokens": 1799
|
||||
},
|
||||
"selected": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-002/object-parent-receipt-report.json",
|
||||
"bytes": 2338,
|
||||
"tokens": 585
|
||||
}
|
||||
],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P18-003/inventory-completion-overlay.json",
|
||||
"bytes": 3661,
|
||||
"reason": "CONTEXT_REMAINING_SPACE"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-003/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P19-003.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-003/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 1,
|
||||
"bytes": 2338,
|
||||
"tokens": 585
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"only object parent is claimed",
|
||||
"effective inventory remains explicit",
|
||||
"no duplicate validation or historical over-claim"
|
||||
],
|
||||
"nextTask": null,
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P19-003.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P19-002/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P19-002.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P19-003.md",
|
||||
"tests/golden/WBV2-P19-002/manifest.json",
|
||||
"docs/status/WBV2-P19-002.md"
|
||||
],
|
||||
"machineOnly": [
|
||||
"tests/golden/WBV2/task-index.json",
|
||||
"tests/golden/M15-03A/task-catalog.jsonl"
|
||||
],
|
||||
"optionalByNeed": [
|
||||
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"任务卡列出的精确协议/生产路径",
|
||||
"任务卡明确命名的长期计划小节"
|
||||
],
|
||||
"forbiddenByDefault": [
|
||||
"完整 CURRENT_EXECUTION_PLAN.md",
|
||||
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
|
||||
"全部 docs/status/*.md",
|
||||
"完整 parity/WBS 计划",
|
||||
"README 历史和 test-results/"
|
||||
]
|
||||
},
|
||||
"parent": {
|
||||
"manifest": {
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P19-002",
|
||||
"parentTask": "WBV2-P19-001",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P19-003",
|
||||
"artifactCount": 12
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P19-002 status",
|
||||
"- task: `WBV2-P19-002`; parent: `WBV2-P19-001`; status: `done`",
|
||||
"- exact inventory binding: `operator:object.parent_set` via `setParent`",
|
||||
"- parent relation: `object:BasicArea -> object:BasicCamera`; revisions: `1 -> 4` sequential",
|
||||
"- malformed parent rejected; save/reopen: `EXACT`; deterministic second run: `true`",
|
||||
"- effective pending before overlay: `6614`; representative slice: `true`",
|
||||
"- nextTask: `WBV2-P19-003`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1073,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 35,
|
||||
"taskTokens": 269
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P19-003.md",
|
||||
"bytes": 1073,
|
||||
"lines": 35,
|
||||
"tokens": 269
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P19-002/manifest.json",
|
||||
"bytes": 2877,
|
||||
"lines": 79,
|
||||
"tokens": 720
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P19-002.md",
|
||||
"bytes": 434,
|
||||
"lines": 9,
|
||||
"tokens": 109
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1799,
|
||||
"evidenceFiles": 1,
|
||||
"evidenceBytes": 2338,
|
||||
"evidenceTokens": 585,
|
||||
"totalTokens": 2384,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3408,
|
||||
"serializedContextTokens": 651,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
{"id":"WBV2-P18-000","gapId":"workflow:authorize_object_create_continuation","ownerFamily":"PROGRAM","sourceTask":"P18","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["P17 overlay remains hash-bound","createPrimitive API is present","one production task is active"]}
|
||||
{"id":"WBV2-P18-001","gapId":"OBJECT_OPERATIONS.CREATE","ownerFamily":"PARITY","sourceTask":"P18","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["source command is hash-bound","duplicate/transform evidence is not rerun","one legacy operator binding is selected"]}
|
||||
{"id":"WBV2-P18-002","gapId":"OBJECT_OPERATIONS.CREATE","ownerFamily":"OBJECT","sourceTask":"P18","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["primitive creates a distinct object","undo/redo revisions are sequential","malformed primitive fails closed","save/reopen is exact"]}
|
||||
{"id":"WBV2-P18-003","gapId":"workflow:close_object_create_gate","ownerFamily":"RELEASE","sourceTask":"P18","state":"active","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["only object add is claimed","effective inventory remains explicit","no duplicate validation or historical over-claim"]}
|
||||
{"id":"WBV2-P19-000","gapId":"workflow:authorize_object_parent_continuation","ownerFamily":"PROGRAM","sourceTask":"P19","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["P18 overlay remains hash-bound","setParent API is present","one production task is active"]}
|
||||
{"id":"WBV2-P19-001","gapId":"OBJECT_OPERATIONS.PARENT","ownerFamily":"PARITY","sourceTask":"P19","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["source command is hash-bound","create/duplicate evidence is not rerun","one legacy operator binding is selected"]}
|
||||
{"id":"WBV2-P19-002","gapId":"OBJECT_OPERATIONS.PARENT","ownerFamily":"OBJECT","sourceTask":"P19","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["parent relation changes","undo/redo revisions are sequential","malformed parent input fails closed","save/reopen is exact"]}
|
||||
{"id":"WBV2-P19-003","gapId":"workflow:close_object_parent_gate","ownerFamily":"RELEASE","sourceTask":"P19","state":"active","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["only object parent is claimed","effective inventory remains explicit","no duplicate validation or historical over-claim"]}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"schemaVersion":1,"operation":"BLENDER_WEB_CAPABILITY_TASK_INDEX","source":{"path":"tests/golden/WBV2-P18-003/create-task-plan.json","sha256":"b519eafd0ed4c0570956d171c72678ee38376026da54170629bb92ad16fbffb4"},"catalog":{"path":"tests/golden/WBV2/task-catalog.jsonl","sha256":"cf53bb997dce1a62e5ff45be99cfda17a8a0be0cbe9e4637fafc780a78fa4f78"},"taskCount":4,"activeTask":"WBV2-P18-003","entries":{"WBV2-P18-000":{"line":0,"offset":0,"length":300,"previous":"WBV2-P17-003","next":"WBV2-P18-001"},"WBV2-P18-001":{"line":1,"offset":300,"length":297,"previous":"WBV2-P18-000","next":"WBV2-P18-002"},"WBV2-P18-002":{"line":2,"offset":597,"length":311,"previous":"WBV2-P18-001","next":"WBV2-P18-003"},"WBV2-P18-003":{"line":3,"offset":908,"length":306,"previous":"WBV2-P18-002","next":null}}}
|
||||
{"schemaVersion":1,"operation":"BLENDER_WEB_CAPABILITY_TASK_INDEX","source":{"path":"tests/golden/WBV2-P19-003/parent-task-plan.json","sha256":"83444c65311eff4430462658c9d4e4219a597347541c42266fee8f9c8647d138"},"catalog":{"path":"tests/golden/WBV2/task-catalog.jsonl","sha256":"15e8c9df6649ddd14ba2675018cc08eccf315f4627d1c3b4ea22a29899ce7fb1"},"taskCount":4,"activeTask":"WBV2-P19-003","entries":{"WBV2-P19-000":{"line":0,"offset":0,"length":294,"previous":"WBV2-P18-003","next":"WBV2-P19-001"},"WBV2-P19-001":{"line":1,"offset":294,"length":294,"previous":"WBV2-P19-000","next":"WBV2-P19-002"},"WBV2-P19-002":{"line":2,"offset":588,"length":302,"previous":"WBV2-P19-001","next":"WBV2-P19-003"},"WBV2-P19-003":{"line":3,"offset":890,"length":309,"previous":"WBV2-P19-002","next":null}}}
|
||||
|
||||
1
tools/web/generate-wbv2-parent-gate.mjs
Normal file
1
tools/web/generate-wbv2-parent-gate.mjs
Normal file
File diff suppressed because one or more lines are too long
1
tools/web/generate-wbv2-parent-receipt.mjs
Normal file
1
tools/web/generate-wbv2-parent-receipt.mjs
Normal file
File diff suppressed because one or more lines are too long
6
tools/web/generate-wbv2-parent-root.mjs
Normal file
6
tools/web/generate-wbv2-parent-root.mjs
Normal file
File diff suppressed because one or more lines are too long
2
tools/web/generate-wbv2-parent-selection.mjs
Normal file
2
tools/web/generate-wbv2-parent-selection.mjs
Normal file
File diff suppressed because one or more lines are too long
53
web/tests/e2e/wbv2-object-parent-production.spec.ts
Normal file
53
web/tests/e2e/wbv2-object-parent-production.spec.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import { expect, test } from "@playwright/test";
|
||||
import crypto from "node:crypto";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
|
||||
const root = path.resolve(import.meta.dirname, "../../..");
|
||||
const fixture = fs.readFileSync(path.join(root, "tests/files/web/basic_scene.blend"));
|
||||
const fixtureSha256 = crypto.createHash("sha256").update(fixture).digest("hex");
|
||||
|
||||
test("WBV2-P19-002 binds setParent to compiled WASM Main", async ({ page }) => {
|
||||
test.setTimeout(120_000);
|
||||
await page.goto("/");
|
||||
const result = await page.evaluate(async (bytes) => {
|
||||
const { WebEngineClient } = await import("/src/engine-client/WebEngineClient.ts");
|
||||
const client = new WebEngineClient({ timeoutMs: 30_000 });
|
||||
const reopened = new WebEngineClient({ timeoutMs: 30_000 });
|
||||
try {
|
||||
const opened = await client.openBlend(Uint8Array.from(bytes).buffer);
|
||||
const objects = opened.snapshot.nodes.filter((node) => ["MESH", "EMPTY", "LIGHT", "CAMERA"].includes(node.type));
|
||||
if (objects.length < 2) throw new Error(`basic scene needs two object nodes; got ${opened.snapshot.nodes.map((node) => `${node.type}:${node.id}`).join(",")}`);
|
||||
const child = objects[0];
|
||||
const parent = objects[1];
|
||||
const baseRevision = opened.snapshot.revision;
|
||||
const changed = await client.applyCommand({ type: "setParent", objectId: child.id, parentId: parent.id, keepTransform: true } as any);
|
||||
const childAfter = changed.snapshot.nodes.find((node) => node.id === child.id);
|
||||
const undone = await client.applyCommand({ type: "undo" });
|
||||
const redone = await client.applyCommand({ type: "redo" });
|
||||
const malformed = await client.applyCommand({ type: "setParent", objectId: child.id, parentId: "object:missing", keepTransform: true } as any).then(() => ({ code: "NO_ERROR" })).catch((error: any) => ({ code: error?.code, message: error?.message }));
|
||||
const afterMalformed = await client.snapshot();
|
||||
const saved = await client.saveBlend();
|
||||
const reopen = await reopened.openBlend(saved);
|
||||
const childReopened = reopen.snapshot.nodes.find((node) => node.id === child.id);
|
||||
const digest = async (value: ArrayBuffer) => { const hash = await crypto.subtle.digest("SHA-256", value); return Array.from(new Uint8Array(hash), (byte) => byte.toString(16).padStart(2, "0")).join(""); };
|
||||
return { browser: "chromium", baseRevision, childId: child.id, parentId: parent.id, parentAfter: childAfter?.parentId, createRevision: changed.snapshot.revision, undoRevision: undone.snapshot.revision, redoRevision: redone.snapshot.revision, malformed, malformedRevisionPreserved: afterMalformed.snapshot.revision === redone.snapshot.revision, reopenedParent: childReopened?.parentId, reopenedRevision: reopen.snapshot.revision, savedSha256: await digest(saved) };
|
||||
} finally {
|
||||
client.terminate();
|
||||
reopened.terminate();
|
||||
}
|
||||
}, Array.from(fixture));
|
||||
|
||||
fs.mkdirSync(path.join(root, "tests/golden/WBV2-P19-002"), { recursive: true });
|
||||
const output = process.env.WBV2_PARENT_REPORT ?? "object-parent-production.json";
|
||||
fs.writeFileSync(path.join(root, "tests/golden/WBV2-P19-002", output), `${JSON.stringify({ schemaVersion: 1, task: "WBV2-P19-002", operation: "OBJECT_PARENT_ENGINE_CHROMIUM", queueMutation: false, fixtureSha256, ...result }, null, 2)}\n`);
|
||||
expect(result.browser).toBe("chromium");
|
||||
expect(result.parentAfter).toBe(result.parentId);
|
||||
expect(result.createRevision).toBe(result.baseRevision + 1);
|
||||
expect(result.undoRevision).toBe(result.baseRevision + 2);
|
||||
expect(result.redoRevision).toBe(result.baseRevision + 3);
|
||||
expect(result.malformed.code).not.toBe("NO_ERROR");
|
||||
expect(result.malformedRevisionPreserved).toBe(true);
|
||||
expect(result.reopenedParent).toBe(result.parentId);
|
||||
expect(result.reopenedRevision).toBe(1);
|
||||
});
|
||||
Reference in New Issue
Block a user