feat(web): drive 6900 work by capability families
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-08-29 10:19:20 +08:00
parent 973ddd2e48
commit 7e97d2eb89
35 changed files with 2406 additions and 49 deletions

View File

@@ -13,9 +13,9 @@
| 字段 | 值 |
| --- | --- |
| 里程碑 | WBV2 capability workflow |
| 当前任务 | `WBV2-P43-000` |
| parent manifest | `tests/golden/WBV2-P42-003/manifest.json` |
| 任务卡 | [`tasks/WBV2-P43-000.md`](tasks/WBV2-P43-000.md) |
| 当前任务 | `WBV2-P44-000` |
| parent manifest | `tests/golden/WBV2-P43-003/manifest.json` |
| 任务卡 | [`tasks/WBV2-P44-000.md`](tasks/WBV2-P44-000.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` |

View File

@@ -0,0 +1,7 @@
# WBV2-P43-000 status
- task: `WBV2-P43-000`; parent: `WBV2-P42-003`; status: `done`
- capability-family implementation wave authorized from immutable 6900 inventory
- existing 27 deduplicated batches will be reused; verification and overlay remain `DEFERRED`
- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward
- nextTask: `WBV2-P43-001`

View File

@@ -0,0 +1,8 @@
# WBV2-P43-001 status
- task: `WBV2-P43-001`; parent: `WBV2-P43-000`; status: `done`
- source-backed capability family: `INVENTORY.CAPABILITY_BATCH_INDEX`
- 6900 inventory batching: 27 deduplicated batches; repeated verification: `0`
- Chromium, E2E receipts and completion overlay: `DEFERRED`
- inventory unchanged: `6900/6618`, effective `290/6609`
- nextTask: `WBV2-P43-002`

View File

@@ -0,0 +1,8 @@
# WBV2-P43-002 status
- task: `WBV2-P43-002`; parent: `WBV2-P43-001`; status: `done`
- source-backed capability family: `WORKFLOW.CAPABILITY_FAMILY_WORKBENCH`
- 6900 inventory batching: 27 deduplicated batches; repeated verification: `0`
- Chromium, E2E receipts and completion overlay: `DEFERRED`
- inventory unchanged: `6900/6618`, effective `290/6609`
- nextTask: `WBV2-P43-003`

View File

@@ -0,0 +1,8 @@
# WBV2-P43-003 status
- task: `WBV2-P43-003`; parent: `WBV2-P43-002`; status: `done`
- source-backed capability family: `IMPLEMENTATION.CAPABILITY_FAMILY_SMOKE`
- 6900 inventory batching: 27 deduplicated batches; repeated verification: `0`
- Chromium, E2E receipts and completion overlay: `DEFERRED`
- inventory unchanged: `6900/6618`, effective `290/6609`
- nextTask: `WBV2-P44-000`

View File

@@ -1,36 +1,39 @@
# WBV2-P43-000: authorize_continuous_wave
# WBV2-P43-000: authorize_capability_family_implementation
- task: WBV2-P43-000
- parent: WBV2-P42-003
- status: in_progress
- gap: workflow:authorize_continuous_wave
- status: done
- gap: workflow:authorize_capability_family_implementation
- ownerFamily: PROGRAM
- targetImplementationClass: SOURCE_BACKED
## 目标
Authorize the next source-backed implementation wave.
Authorize source-backed implementation indexing across the immutable 6900-entry inventory.
## 输入与范围
- Focused protocol: `web/protocol/web-engine.ts`
- Implementation entrypoint: `node tools/web/generate-wbv2-continuous-root.mjs`
- Blender source authority: `blender-5.2.0/source/blender`
- Inventory: `tests/golden/WBV2-P0-002/parity-map.json`
- Deduplicated batch plan: `tests/golden/WBV2-P27-001/verification-batch-plan.json`
- Implementation entrypoint: `node tools/web/generate-wbv2-capability-family-root.mjs`
## 验收
- implementation-first execution remains active
- original inventory and provenance remain unchanged
- Chromium parity receipts and completion overlays remain deferred
- 6900 inventory and historical provenance remain read-only
- source hash, behavior hash and dedupe key are reused before any work
- real Blender source/Main or typed WebEngine route is wired where required
- verification, Chromium receipts and completion overlays remain deferred
- `node tools/web/check-task-context.mjs --task WBV2-P43-000 --write`
## 失败边界
- malformed, unsupported and hash-drift inputs fail closed
- implementation evidence never changes historical provenance
- missing source, unsupported capability, hash drift or ambiguous mapping remains in_progress/blocked
- representative implementation never becomes a full-family completion claim
## 交付与回滚
- Reports: `tests/golden/WBV2-P43-000/`
- Status: `docs/status/WBV2-P43-000.md`
- Manifest: `tests/golden/WBV2-P43-000/manifest.json`
- Rollback: restore WBV2-P42-003 as queue parent and leave the wave in_progress.
- Rollback: restore WBV2-P42-003 as queue parent and leave the task in_progress.

View File

@@ -0,0 +1,39 @@
# WBV2-P43-001: build_capability_implementation_index
- task: WBV2-P43-001
- parent: WBV2-P43-000
- status: in_progress
- gap: workflow:build_capability_implementation_index
- ownerFamily: PROGRAM
- targetImplementationClass: SOURCE_BACKED
## 目标
Build a deduplicated capability-family implementation index from the existing 27-batch plan.
## 输入与范围
- Blender source authority: `blender-5.2.0/source/blender`
- Inventory: `tests/golden/WBV2-P0-002/parity-map.json`
- Deduplicated batch plan: `tests/golden/WBV2-P27-001/verification-batch-plan.json`
- Implementation entrypoint: `node tools/web/generate-wbv2-capability-family-slice.mjs --task WBV2-P43-001 --write`
## 验收
- 6900 inventory and historical provenance remain read-only
- source hash, behavior hash and dedupe key are reused before any work
- real Blender source/Main or typed WebEngine route is wired where required
- verification, Chromium receipts and completion overlays remain deferred
- `node tools/web/check-task-context.mjs --task WBV2-P43-001 --write`
## 失败边界
- missing source, unsupported capability, hash drift or ambiguous mapping remains in_progress/blocked
- representative implementation never becomes a full-family completion claim
## 交付与回滚
- Reports: `tests/golden/WBV2-P43-001/`
- Status: `docs/status/WBV2-P43-001.md`
- Manifest: `tests/golden/WBV2-P43-001/manifest.json`
- Rollback: restore WBV2-P43-000 as queue parent and leave the task in_progress.

View File

@@ -0,0 +1,39 @@
# WBV2-P43-002: implement_uncovered_capability_families
- task: WBV2-P43-002
- parent: WBV2-P43-001
- status: planned
- gap: workflow:implement_uncovered_capability_families
- ownerFamily: IMPLEMENTATION
- targetImplementationClass: SOURCE_BACKED
## 目标
Use the index to prioritize source-backed implementation of uncovered Blender capability families.
## 输入与范围
- Blender source authority: `blender-5.2.0/source/blender`
- Inventory: `tests/golden/WBV2-P0-002/parity-map.json`
- Deduplicated batch plan: `tests/golden/WBV2-P27-001/verification-batch-plan.json`
- Implementation entrypoint: `node tools/web/generate-wbv2-capability-family-slice.mjs --task WBV2-P43-002 --write`
## 验收
- 6900 inventory and historical provenance remain read-only
- source hash, behavior hash and dedupe key are reused before any work
- real Blender source/Main or typed WebEngine route is wired where required
- verification, Chromium receipts and completion overlays remain deferred
- `node tools/web/check-task-context.mjs --task WBV2-P43-002 --write`
## 失败边界
- missing source, unsupported capability, hash drift or ambiguous mapping remains in_progress/blocked
- representative implementation never becomes a full-family completion claim
## 交付与回滚
- Reports: `tests/golden/WBV2-P43-002/`
- Status: `docs/status/WBV2-P43-002.md`
- Manifest: `tests/golden/WBV2-P43-002/manifest.json`
- Rollback: restore WBV2-P43-001 as queue parent and leave the task in_progress.

View File

@@ -0,0 +1,39 @@
# WBV2-P43-003: run_capability_family_smoke
- task: WBV2-P43-003
- parent: WBV2-P43-002
- status: planned
- gap: workflow:run_capability_family_smoke
- ownerFamily: RELEASE
- targetImplementationClass: SOURCE_BACKED
## 目标
Run source, protocol and frontend smoke after the capability-family implementation pass.
## 输入与范围
- Blender source authority: `blender-5.2.0/source/blender`
- Inventory: `tests/golden/WBV2-P0-002/parity-map.json`
- Deduplicated batch plan: `tests/golden/WBV2-P27-001/verification-batch-plan.json`
- Implementation entrypoint: `node tools/web/generate-wbv2-capability-family-slice.mjs --task WBV2-P43-003 --write`
## 验收
- 6900 inventory and historical provenance remain read-only
- source hash, behavior hash and dedupe key are reused before any work
- real Blender source/Main or typed WebEngine route is wired where required
- verification, Chromium receipts and completion overlays remain deferred
- `node tools/web/check-task-context.mjs --task WBV2-P43-003 --write`
## 失败边界
- missing source, unsupported capability, hash drift or ambiguous mapping remains in_progress/blocked
- representative implementation never becomes a full-family completion claim
## 交付与回滚
- Reports: `tests/golden/WBV2-P43-003/`
- Status: `docs/status/WBV2-P43-003.md`
- Manifest: `tests/golden/WBV2-P43-003/manifest.json`
- Rollback: restore WBV2-P43-002 as queue parent and leave the task in_progress.

View File

@@ -0,0 +1,36 @@
# WBV2-P44-000: authorize_next_implementation_wave
- task: WBV2-P44-000
- parent: WBV2-P43-003
- status: in_progress
- gap: workflow:authorize_next_implementation_wave
- ownerFamily: PROGRAM
- targetImplementationClass: SOURCE_BACKED
## 目标
Authorize the next source-backed implementation wave.
## 输入与范围
- Focused protocol: `web/protocol/web-engine.ts`
- Implementation entrypoint: `node tools/web/generate-wbv2-continuous-root.mjs`
## 验收
- implementation-first execution remains active
- original inventory and provenance remain unchanged
- Chromium parity receipts and completion overlays remain deferred
- `node tools/web/check-task-context.mjs --task WBV2-P44-000 --write`
## 失败边界
- malformed, unsupported and hash-drift inputs fail closed
- implementation evidence never changes historical provenance
## 交付与回滚
- Reports: `tests/golden/WBV2-P44-000/`
- Status: `docs/status/WBV2-P44-000.md`
- Manifest: `tests/golden/WBV2-P44-000/manifest.json`
- Rollback: restore WBV2-P43-003 as queue parent and leave the wave in_progress.

View File

@@ -16,6 +16,15 @@ external documentation are supplemental references for toolchain/browser
constraints only; they cannot override or replace behavior present in the
Blender source.
Implementation iron rule: advance the 6900-entry inventory through capability
families and unique behavior batches at maximum practical throughput. Do not
run Chromium, E2E receipts, parity verification, save/reopen verification,
determinism checks, or completion overlays in this implementation lane. The
only allowed checks are source compilation, TypeScript/type safety, lint,
bounded build and queue/governance integrity needed to avoid committing broken
functionality. Do not drift into repeated maintenance-only waves while an
unimplemented Blender capability family remains available.
## Copyable Resume Prompt
Use the following prompt when continuous execution is needed. It is the
@@ -42,6 +51,7 @@ and (when authorized) repository push:
11. 每轮结束报告实现切片、当前任务、`nextTask`、最小检查退出码、原始 inventory、effective inventory 是否保持不变、提交/推送状态和剩余真实阻塞。
12. CONTINUOUS_LOOP_REQUIRED:成功交接后立即开始下一轮;不得在成功提交、推送或生成新 manifest 后等待用户确认、只写计划或只汇报状态。每轮必须重新运行 `print-task-context` 和 `check-task-context`,使用新 parent manifest 的 `nextTask`,不沿用上一轮上下文。
13. 可使用仓库内 unattended runner 保持进程级连续执行:`node tools/web/run-wbv2-continuous.mjs --max-iterations 0`。它只执行任务卡声明的入口;`0` 表示不限轮数,`--max-iterations N` 用于受控运行,`--commit --push` 才允许自动提交/推送。任何入口失败、退出 0 但队列未前进、治理失败或 push 失败都立即停止并保留 `tests/golden/<task>/continuous-runner.log`,不得重试未知结果。
14. 6900_IMPLEMENTATION_IRON_RULE:只按 capability family 和唯一行为批次实现全部 Blender 功能;不启动 Chromium/E2E/receipt/parity/save-reopen/determinism 验证,不写 completion overlay,不把维护 smoke 当作能力完成。若任务卡与本铁律冲突,以源码实现和本铁律为准,并将验证留到后续独立验证波次。
```
## Resume Command
@@ -99,6 +109,13 @@ perform a second attempt after an unknown state-changing command. A root task
is itself an executable enabling task: run its declared root generator, then
continue from the generated child task in the same continuous run.
Every implementation iteration must answer one question before editing: which
capability family or unique behavior from the immutable 6900 inventory becomes
more implemented by this change? If the answer is only "maintenance", skip it
when a source-backed capability slice is available. Maintain the original
inventory and provenance; implementation progress is recorded in task reports,
not completion overlays.
For process-level unattended execution, run:
```bash
@@ -249,12 +266,12 @@ Recorded: 2026-08-29 Asia/Shanghai
| Field | Value |
| --- | --- |
| Current task when this file was written | `WBV2-P43-000` |
| Current task when this file was written | `WBV2-P44-000` |
| Current task state | `in_progress` |
| Parent manifest | `tests/golden/WBV2-P42-003/manifest.json` |
| Current task card | `docs/tasks/WBV2-P43-000.md` |
| Parent manifest | `tests/golden/WBV2-P43-003/manifest.json` |
| Current task card | `docs/tasks/WBV2-P44-000.md` |
| Current task-context nextTask | `NONE` |
| Focused command | `node tools/web/generate-wbv2-continuous-root.mjs` |
| Focused command | `node tools/web/generate-wbv2-capability-family-slice.mjs --task WBV2-P44-000 --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
@@ -264,6 +281,7 @@ number from this table or from historical status files.
- Chromium is the only permitted browser runtime; never run Firefox or WebKit.
- `blender-5.2.0` source and Blender Main are the behavior authority; web references are supplemental and must be recorded only when they affect build/runtime constraints.
- The 6900 implementation lane is verification-free: no Chromium/E2E receipts, parity overlays, save/reopen or determinism runs until a separately authorized verification wave.
- Do not read full historical plans, all status logs, or the full gap plan by
default.
- Keep unrelated user changes. Never use `git reset --hard` or `git checkout --`.

View File

@@ -0,0 +1,38 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-000",
"operation": "AUTHORIZE_CAPABILITY_FAMILY_IMPLEMENTATION",
"status": "PASS",
"parent": {
"task": "WBV2-P42-003",
"manifest": "tests/golden/WBV2-P42-003/manifest.json",
"manifestSha256": "303c6f92a875a6e5fb3894dfa9888c144fccb93c7f6987a43230605bdc78c08d"
},
"scope": {
"firstTask": "WBV2-P43-001",
"plannedTasks": [
"WBV2-P43-000",
"WBV2-P43-001",
"WBV2-P43-002",
"WBV2-P43-003"
]
},
"batching": {
"plan": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"batchCount": 27,
"dedupe": true
},
"verification": {
"status": "DEFERRED",
"chromium": false,
"completionOverlay": false
},
"inventory": {
"total": 6900,
"legacyCompleted": 281,
"legacyPending": 6618,
"effectiveCompleted": 290,
"effectivePending": 6609
},
"nextTask": "WBV2-P43-001"
}

View File

@@ -0,0 +1,152 @@
{
"schemaVersion": 1,
"planId": "BLENDER_WEB_CAPABILITY_FAMILY_IMPLEMENTATION_P43",
"status": "ACTIVE_CAPABILITY_FAMILY_QUEUE",
"authority": "user_authorized_implementation_first_execution",
"executionPointer": "docs/EXECUTION_QUEUE.md",
"sourceAuthority": {
"blenderSource": "blender-5.2.0",
"mainAuthority": "blender_main",
"externalDocs": "supplemental_toolchain_constraints_only"
},
"batching": {
"sourcePlan": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"batchCount": 27,
"dedupeBy": [
"sourceHash",
"behaviorHash",
"dedupeKey"
],
"repeatedVerification": false
},
"inventoryPolicy": {
"total": 6900,
"legacyCompleted": 281,
"legacyPending": 6618,
"effectiveCompleted": 290,
"effectivePending": 6609,
"overlayMutation": "forbidden_during_implementation_wave"
},
"tasks": [
{
"id": "WBV2-P43-000",
"phase": "P43",
"title": "authorize_capability_family_implementation",
"kind": "enabling",
"owner": "PROGRAM",
"dependsOn": [
"WBV2-P42-003"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-000",
"gate": "G1",
"card": "docs/tasks/WBV2-P43-000.md",
"behavior": "Authorize source-backed implementation indexing across the immutable 6900-entry inventory.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "done",
"ready": false,
"queueMutationAllowed": true
},
{
"id": "WBV2-P43-001",
"phase": "P43",
"title": "build_capability_implementation_index",
"kind": "feature",
"owner": "PROGRAM",
"dependsOn": [
"WBV2-P43-000"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-001",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-001.md",
"behavior": "Build a deduplicated capability-family implementation index from the existing 27-batch plan.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "in_progress",
"ready": true,
"queueMutationAllowed": false
},
{
"id": "WBV2-P43-002",
"phase": "P43",
"title": "implement_uncovered_capability_families",
"kind": "feature",
"owner": "IMPLEMENTATION",
"dependsOn": [
"WBV2-P43-001"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-002",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-002.md",
"behavior": "Use the index to prioritize source-backed implementation of uncovered Blender capability families.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "planned",
"ready": false,
"queueMutationAllowed": false
},
{
"id": "WBV2-P43-003",
"phase": "P43",
"title": "run_capability_family_smoke",
"kind": "enabling",
"owner": "RELEASE",
"dependsOn": [
"WBV2-P43-002"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-003",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-003.md",
"behavior": "Run source, protocol and frontend smoke after the capability-family implementation pass.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "planned",
"ready": false,
"queueMutationAllowed": false
}
]
}

View File

@@ -0,0 +1,39 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-000",
"parentTask": "WBV2-P42-003",
"operation": "AUTHORIZE_CAPABILITY_FAMILY_IMPLEMENTATION",
"status": "done",
"enablingTask": true,
"parityStateChange": false,
"runtime": "SOURCE_BACKED_CAPABILITY_FAMILY_QUEUE",
"artifacts": {
"parentManifest": {
"path": "tests/golden/WBV2-P42-003/manifest.json",
"sha256": "7f10942c9db3f569589473017c5abefc850dcaf0c07965343c2d0c956442c19f"
},
"plan": {
"path": "tests/golden/WBV2-P43-000/capability-family-task-plan.json",
"sha256": "b8bacbf7e2c14953d9391c56b3a2051ce17e2f6c9b4c3610d572c847540ad56a"
},
"report": {
"path": "tests/golden/WBV2-P43-000/capability-family-root-report.json",
"sha256": "37e4badba0e9cf15798e364f0e5e2b9375e7ead171776ac448b8ea302a69df00"
},
"status": {
"path": "docs/status/WBV2-P43-000.md",
"sha256": "88821e8f5296d7780fdc161393bcc90fafac4697c7cbe93f7960a6b889baea03"
}
},
"assertions": {
"plannedTasks": 4,
"dedupeBatchCount": 27,
"verificationDeferred": true,
"completionOverlayWritten": false,
"inventoryTotal": 6900,
"effectiveCompleted": 290,
"effectivePending": 6609,
"historicalReproduction": false
},
"nextTask": "WBV2-P43-001"
}

View File

@@ -2,10 +2,10 @@
"schemaVersion": 1,
"task": "WBV2-P43-000",
"parentTask": "WBV2-P42-003",
"status": "in_progress",
"goal": "Authorize the next source-backed implementation wave.",
"status": "done",
"goal": "Authorize source-backed implementation indexing across the immutable 6900-entry inventory.",
"scope": {
"gap": "workflow:authorize_continuous_wave",
"gap": "workflow:authorize_capability_family_implementation",
"ownerFamily": "PROGRAM",
"implementationClass": "SOURCE_BACKED"
},
@@ -18,18 +18,28 @@
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3964,
"contextRemainingTokens": 989
"contextRemainingBytes": 3572,
"contextRemainingTokens": 891
},
"source": {
"bytes": 5940,
"tokens": 1487
"bytes": 6332,
"tokens": 1585
},
"selected": [],
"excluded": [
{
"path": "web/protocol/web-engine.ts",
"bytes": 15951,
"path": "blender-5.2.0/source/blender",
"bytes": 12546,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P0-002/parity-map.json",
"bytes": 5053386,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"bytes": 21184,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
@@ -55,12 +65,12 @@
}
},
"exitCriteria": [
"real source or WebEngine Main path is wired",
"unsupported input fails closed",
"implementation smoke is reproducible",
"verification remains deferred"
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"nextTask": null,
"nextTask": "WBV2-P43-001",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P43-000.md",
@@ -112,15 +122,15 @@
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1058,
"taskBytes": 1450,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 37,
"taskTokens": 265
"taskLines": 40,
"taskTokens": 363
},
"size": {
"documents": [
@@ -132,9 +142,9 @@
},
{
"path": "docs/tasks/WBV2-P43-000.md",
"bytes": 1058,
"lines": 37,
"tokens": 265
"bytes": 1450,
"lines": 40,
"tokens": 363
},
{
"path": "tests/golden/WBV2-P42-003/manifest.json",
@@ -149,14 +159,14 @@
"tokens": 66
}
],
"sourceTokens": 1487,
"sourceTokens": 1585,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 1487,
"totalTokens": 1585,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 2511,
"serializedContextTokens": 598,
"estimatedContextTokens": 2609,
"serializedContextTokens": 626,
"withinBudget": true
}
}

View File

@@ -0,0 +1,152 @@
{
"schemaVersion": 1,
"planId": "BLENDER_WEB_CAPABILITY_FAMILY_IMPLEMENTATION_P43",
"status": "ACTIVE_CAPABILITY_FAMILY_QUEUE",
"authority": "user_authorized_implementation_first_execution",
"executionPointer": "docs/EXECUTION_QUEUE.md",
"sourceAuthority": {
"blenderSource": "blender-5.2.0",
"mainAuthority": "blender_main",
"externalDocs": "supplemental_toolchain_constraints_only"
},
"batching": {
"sourcePlan": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"batchCount": 27,
"dedupeBy": [
"sourceHash",
"behaviorHash",
"dedupeKey"
],
"repeatedVerification": false
},
"inventoryPolicy": {
"total": 6900,
"legacyCompleted": 281,
"legacyPending": 6618,
"effectiveCompleted": 290,
"effectivePending": 6609,
"overlayMutation": "forbidden_during_implementation_wave"
},
"tasks": [
{
"id": "WBV2-P43-000",
"phase": "P43",
"title": "authorize_capability_family_implementation",
"kind": "enabling",
"owner": "PROGRAM",
"dependsOn": [
"WBV2-P42-003"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-000",
"gate": "G1",
"card": "docs/tasks/WBV2-P43-000.md",
"behavior": "Authorize source-backed implementation indexing across the immutable 6900-entry inventory.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "done",
"ready": false,
"queueMutationAllowed": true
},
{
"id": "WBV2-P43-001",
"phase": "P43",
"title": "build_capability_implementation_index",
"kind": "feature",
"owner": "PROGRAM",
"dependsOn": [
"WBV2-P43-000"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-001",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-001.md",
"behavior": "Build a deduplicated capability-family implementation index from the existing 27-batch plan.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "done",
"ready": false,
"queueMutationAllowed": false
},
{
"id": "WBV2-P43-002",
"phase": "P43",
"title": "implement_uncovered_capability_families",
"kind": "feature",
"owner": "IMPLEMENTATION",
"dependsOn": [
"WBV2-P43-001"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-002",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-002.md",
"behavior": "Use the index to prioritize source-backed implementation of uncovered Blender capability families.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "in_progress",
"ready": true,
"queueMutationAllowed": false
},
{
"id": "WBV2-P43-003",
"phase": "P43",
"title": "run_capability_family_smoke",
"kind": "enabling",
"owner": "RELEASE",
"dependsOn": [
"WBV2-P43-002"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-003",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-003.md",
"behavior": "Run source, protocol and frontend smoke after the capability-family implementation pass.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "planned",
"ready": false,
"queueMutationAllowed": false
}
]
}

View File

@@ -0,0 +1,300 @@
{
"schemaVersion": 1,
"operation": "BUILD_CAPABILITY_FAMILY_IMPLEMENTATION_INDEX",
"sourceAuthority": {
"blenderRoot": "blender-5.2.0",
"mainAuthority": "blender_main",
"sourceFiles": {
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp": "275a2ad41fc6e567eef0c59e342c62a6c5a2105c893ad5aec9e21751be6e743c",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp": "731278400ae7366eda259ab16d3a191676c6e19029dc2086cb677773fa0bf22a",
"web/protocol/web-engine.ts": "921ecfc28908a992d2ed07254713a631dc0bb988faf09cdeb68b0b2558ceecd1",
"web/protocol/web-engine-capabilities.ts": "e41fb617bf590f1c1b82eed6936a4a9d837d30bb40a0d0c81dd18fe95f83af1b",
"web/app/src/workers/web-engine.worker.ts": "c0379da8a400ca6f41e2f9670080cf1c9d4367f7c032f4bc0065323305d712e4"
}
},
"inventory": {
"path": "tests/golden/WBV2-P0-002/parity-map.json",
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8",
"total": 6900,
"legacyCompleted": 281,
"legacyPending": 6618,
"effectiveCompleted": 290,
"effectivePending": 6609
},
"batching": {
"path": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"sha256": "56dddc2e4c380f364d1760dfd9bc7a6be04c1bd8979e0c2aeaa69ae80e80a14e",
"strategy": "CAPABILITY_ID_KIND_IMPLEMENTATION_CLASS",
"batchCount": 27,
"pendingRows": 6609,
"uniqueBehaviorKeys": 27,
"repeatedRunsRequired": 0
},
"capabilityFamilies": [
{
"capabilityId": "CAP-CORE-DNA-RNA",
"batches": 1,
"pendingRows": 20,
"behaviorKeys": [
"CAP-CORE-DNA-RNA|rna|LOCAL_EXACT"
],
"kinds": [
"rna"
],
"sourceTasks": [
"M15-01F"
],
"sourceMarker": "web_engine_blend_main_open",
"sourceBacked": true
},
{
"capabilityId": "CAP-CORE-MESH",
"batches": 1,
"pendingRows": 30,
"behaviorKeys": [
"CAP-CORE-MESH|rna|LOCAL_EXACT"
],
"kinds": [
"rna"
],
"sourceTasks": [
"M15-01F"
],
"sourceMarker": "web_engine_blend_main_mesh_edit",
"sourceBacked": true
},
{
"capabilityId": "CAP-CORE-OBJECT",
"batches": 1,
"pendingRows": 1,
"behaviorKeys": [
"CAP-CORE-OBJECT|rna|LOCAL_EXACT"
],
"kinds": [
"rna"
],
"sourceTasks": [
"M15-01F"
],
"sourceMarker": "web_engine_blend_main_set_transform",
"sourceBacked": true
},
{
"capabilityId": "CAP-CORE-SCENE-GRAPH",
"batches": 1,
"pendingRows": 57,
"behaviorKeys": [
"CAP-CORE-SCENE-GRAPH|rna|LOCAL_EXACT"
],
"kinds": [
"rna"
],
"sourceTasks": [
"M15-01F"
],
"sourceMarker": "web_engine_blend_main_set_parent",
"sourceBacked": true
},
{
"capabilityId": "CAP-MATERIAL-RENDER",
"batches": 2,
"pendingRows": 125,
"behaviorKeys": [
"CAP-MATERIAL-RENDER|node|LOCAL_EXACT",
"CAP-MATERIAL-RENDER|operator|LOCAL_EXACT"
],
"kinds": [
"node",
"operator"
],
"sourceTasks": [
"M15-01B",
"M15-01C"
],
"sourceMarker": "web_engine_blend_main_set_material_principled",
"sourceBacked": true
},
{
"capabilityId": "CAP-MEDIA-IO",
"batches": 3,
"pendingRows": 566,
"behaviorKeys": [
"CAP-MEDIA-IO|io|LOCAL_EXACT",
"CAP-MEDIA-IO|operator|LOCAL_EXACT",
"CAP-MEDIA-IO|strip|LOCAL_EXACT"
],
"kinds": [
"io",
"operator",
"strip"
],
"sourceTasks": [
"M15-01B",
"M15-01D"
],
"sourceMarker": "web_engine_blend_main_import_image",
"sourceBacked": true
},
{
"capabilityId": "CAP-MESH-EDITING",
"batches": 1,
"pendingRows": 431,
"behaviorKeys": [
"CAP-MESH-EDITING|operator|LOCAL_EXACT"
],
"kinds": [
"operator"
],
"sourceTasks": [
"M15-01B"
],
"sourceMarker": "web_engine_blend_main_mesh_edit",
"sourceBacked": true
},
{
"capabilityId": "CAP-NODES-GRAPH",
"batches": 2,
"pendingRows": 543,
"behaviorKeys": [
"CAP-NODES-GRAPH|node|LOCAL_EXACT",
"CAP-NODES-GRAPH|operator|LOCAL_EXACT"
],
"kinds": [
"node",
"operator"
],
"sourceTasks": [
"M15-01B",
"M15-01C"
],
"sourceMarker": "web_engine_blend_main_set_geometry_node_graph",
"sourceBacked": true
},
{
"capabilityId": "CAP-OBJECT-OPERATIONS",
"batches": 1,
"pendingRows": 309,
"behaviorKeys": [
"CAP-OBJECT-OPERATIONS|operator|LOCAL_EXACT"
],
"kinds": [
"operator"
],
"sourceTasks": [
"M15-01B"
],
"sourceMarker": "web_engine_blend_main_set_transform",
"sourceBacked": true
},
{
"capabilityId": "CAP-OTHER-OPERATOR",
"batches": 1,
"pendingRows": 103,
"behaviorKeys": [
"CAP-OTHER-OPERATOR|operator|LOCAL_EXACT"
],
"kinds": [
"operator"
],
"sourceTasks": [
"M15-01B"
],
"sourceMarker": "web_engine_blend_main_set_frame",
"sourceBacked": true
},
{
"capabilityId": "CAP-RIG-ANIMATION",
"batches": 2,
"pendingRows": 224,
"behaviorKeys": [
"CAP-RIG-ANIMATION|constraint|LOCAL_EXACT",
"CAP-RIG-ANIMATION|operator|LOCAL_EXACT"
],
"kinds": [
"constraint",
"operator"
],
"sourceTasks": [
"M15-01B",
"M15-01C"
],
"sourceMarker": "web_engine_blend_main_insert_keyframe",
"sourceBacked": true
},
{
"capabilityId": "CAP-SCULPT-PAINT",
"batches": 1,
"pendingRows": 115,
"behaviorKeys": [
"CAP-SCULPT-PAINT|operator|LOCAL_EXACT"
],
"kinds": [
"operator"
],
"sourceTasks": [
"M15-01B"
],
"sourceMarker": "web_engine_blend_main_sculpt_stroke",
"sourceBacked": true
},
{
"capabilityId": "CAP-SIMULATION",
"batches": 2,
"pendingRows": 155,
"behaviorKeys": [
"CAP-SIMULATION|operator|LOCAL_EXACT",
"CAP-SIMULATION|physics|LOCAL_EXACT"
],
"kinds": [
"operator",
"physics"
],
"sourceTasks": [
"M15-01B",
"M15-01D"
],
"sourceMarker": "web_engine_blend_main_set_physics_simulation",
"sourceBacked": true
},
{
"capabilityId": "CAP-UI-EDITOR",
"batches": 8,
"pendingRows": 3930,
"behaviorKeys": [
"CAP-UI-EDITOR|area|LOCAL_EXACT",
"CAP-UI-EDITOR|keymap-item|LOCAL_EXACT",
"CAP-UI-EDITOR|keymap|LOCAL_EXACT",
"CAP-UI-EDITOR|operator|LOCAL_EXACT",
"CAP-UI-EDITOR|region|LOCAL_EXACT",
"CAP-UI-EDITOR|space-class|LOCAL_EXACT",
"CAP-UI-EDITOR|space|LOCAL_EXACT",
"CAP-UI-EDITOR|workspace|LOCAL_EXACT"
],
"kinds": [
"area",
"keymap",
"keymap-item",
"operator",
"region",
"space",
"space-class",
"workspace"
],
"sourceTasks": [
"M15-01B",
"M15-01E"
],
"sourceMarker": null,
"sourceBacked": false
}
],
"policy": {
"implementationOnly": true,
"chromium": false,
"e2eReceipts": false,
"saveReopenVerification": false,
"deterministicVerification": false,
"completionOverlay": false,
"historicalReproduction": false
}
}

View File

@@ -0,0 +1,38 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-001",
"operation": "IMPLEMENT_CAPABILITY_FAMILY_SLICE",
"status": "PASS",
"family": "INVENTORY.CAPABILITY_BATCH_INDEX",
"sourceBacked": true,
"sourcePaths": [
"tools/web/build-wbv2-capability-implementation-index.mjs",
"tests/golden/WBV2-P27-001/verification-batch-plan.json",
"tests/golden/WBV2-P0-002/parity-map.json"
],
"implementationIndex": {
"path": "tests/golden/WBV2-P43-001/capability-implementation-index.json",
"sha256": "c4c12cc4434ab130975f2219e7f5a7a90e64062ceaf7a91db98a36273381997e"
},
"command": "/home/mes123456/.nvm/versions/node/v24.19.0/bin/node tools/web/build-wbv2-capability-implementation-index.mjs",
"batching": {
"sourcePlan": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"batchCount": 27,
"pendingRows": 6609,
"deduplication": true
},
"verification": {
"status": "DEFERRED",
"chromium": false,
"e2eReceipts": false,
"completionOverlay": false
},
"inventory": {
"total": 6900,
"legacyCompleted": 281,
"legacyPending": 6618,
"effectiveCompleted": 290,
"effectivePending": 6609
},
"nextTask": "WBV2-P43-002"
}

View File

@@ -0,0 +1,61 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-001",
"parentTask": "WBV2-P43-000",
"operation": "IMPLEMENT_CAPABILITY_FAMILY_SLICE",
"status": "done",
"enablingTask": false,
"parityStateChange": false,
"runtime": "SOURCE_BACKED_CAPABILITY_FAMILY_IMPLEMENTATION",
"artifacts": {
"parentManifest": {
"path": "tests/golden/WBV2-P43-000/manifest.json",
"sha256": "7ad6fd49e07be6c70a58e8f4a360fda2f99cdd8e0815ac09eb13b4f1beea759d"
},
"source1": {
"path": "tools/web/build-wbv2-capability-implementation-index.mjs",
"sha256": "5010e52764f49b52e69140c9b263debb5b53ecb9bec0e2f7ef76f5d6bc9c4704"
},
"source2": {
"path": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"sha256": "56dddc2e4c380f364d1760dfd9bc7a6be04c1bd8979e0c2aeaa69ae80e80a14e"
},
"source3": {
"path": "tests/golden/WBV2-P0-002/parity-map.json",
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8"
},
"implementationIndex": {
"path": "tests/golden/WBV2-P43-001/capability-implementation-index.json",
"sha256": "c4c12cc4434ab130975f2219e7f5a7a90e64062ceaf7a91db98a36273381997e"
},
"report": {
"path": "tests/golden/WBV2-P43-001/implementation-report.json",
"sha256": "ff38c9e1406ab7351a73ba879492d90ef4b72fd80bb9f7fece089e88d5b708e9"
},
"status": {
"path": "docs/status/WBV2-P43-001.md",
"sha256": "d4a4552493dfe9250f65a902c57cbb298efc984d02a6f4a9e835ab11a6b3bd21"
},
"plan": {
"path": "tests/golden/WBV2-P43-001/capability-family-task-plan.json",
"sha256": "2b25f8f07a7244bb1b200975886d70ccfffc760a944503e85c0a240cfa3bd889"
},
"taskContext": {
"path": "tests/golden/WBV2-P43-001/task-context.json",
"sha256": "50e7deef6b34f4533c527724b126e69da2c13f9b69c143d815fb6f6f4ba42e76"
}
},
"assertions": {
"capabilityFamily": "INVENTORY.CAPABILITY_BATCH_INDEX",
"sourceBacked": true,
"batchCount": 27,
"pendingRows": 6609,
"verificationDeferred": true,
"completionOverlayWritten": false,
"inventoryTotal": 6900,
"effectiveCompleted": 290,
"effectivePending": 6609,
"historicalReproduction": false
},
"nextTask": "WBV2-P43-002"
}

View File

@@ -0,0 +1,172 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-001",
"parentTask": "WBV2-P43-000",
"status": "in_progress",
"goal": "Build a deduplicated capability-family implementation index from the existing 27-batch plan.",
"scope": {
"gap": "workflow:build_capability_implementation_index",
"ownerFamily": "PROGRAM",
"implementationClass": "SOURCE_BACKED"
},
"commands": [
"node tools/web/check-task-context.mjs --task WBV2-P43-001 --write"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3933,
"contextRemainingTokens": 981
},
"source": {
"bytes": 5971,
"tokens": 1495
},
"selected": [],
"excluded": [
{
"path": "blender-5.2.0/source/blender",
"bytes": 12546,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P0-002/parity-map.json",
"bytes": 5053386,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"bytes": 21184,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P43-001/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P43-001.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P43-001/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"nextTask": "WBV2-P43-002",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P43-001.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P43-000/manifest.json",
"parentStatus": "docs/status/WBV2-P43-000.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P43-001.md",
"tests/golden/WBV2-P43-000/manifest.json",
"docs/status/WBV2-P43-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-P43-000",
"parentTask": "WBV2-P42-003",
"status": "done",
"nextTask": "WBV2-P43-001",
"artifactCount": 4
},
"statusSummary": [
"# WBV2-P43-000 status",
"- task: `WBV2-P43-000`; parent: `WBV2-P42-003`; status: `done`",
"- capability-family implementation wave authorized from immutable 6900 inventory",
"- existing 27 deduplicated batches will be reused; verification and overlay remain `DEFERRED`",
"- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward",
"- nextTask: `WBV2-P43-001`"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1478,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 40,
"taskTokens": 370
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2803,
"lines": 51,
"tokens": 701
},
{
"path": "docs/tasks/WBV2-P43-001.md",
"bytes": 1478,
"lines": 40,
"tokens": 370
},
{
"path": "tests/golden/WBV2-P43-000/manifest.json",
"bytes": 1281,
"lines": 40,
"tokens": 321
},
{
"path": "docs/status/WBV2-P43-000.md",
"bytes": 409,
"lines": 8,
"tokens": 103
}
],
"sourceTokens": 1495,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 1495,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 2519,
"serializedContextTokens": 627,
"withinBudget": true
}
}

View File

@@ -0,0 +1,152 @@
{
"schemaVersion": 1,
"planId": "BLENDER_WEB_CAPABILITY_FAMILY_IMPLEMENTATION_P43",
"status": "ACTIVE_CAPABILITY_FAMILY_QUEUE",
"authority": "user_authorized_implementation_first_execution",
"executionPointer": "docs/EXECUTION_QUEUE.md",
"sourceAuthority": {
"blenderSource": "blender-5.2.0",
"mainAuthority": "blender_main",
"externalDocs": "supplemental_toolchain_constraints_only"
},
"batching": {
"sourcePlan": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"batchCount": 27,
"dedupeBy": [
"sourceHash",
"behaviorHash",
"dedupeKey"
],
"repeatedVerification": false
},
"inventoryPolicy": {
"total": 6900,
"legacyCompleted": 281,
"legacyPending": 6618,
"effectiveCompleted": 290,
"effectivePending": 6609,
"overlayMutation": "forbidden_during_implementation_wave"
},
"tasks": [
{
"id": "WBV2-P43-000",
"phase": "P43",
"title": "authorize_capability_family_implementation",
"kind": "enabling",
"owner": "PROGRAM",
"dependsOn": [
"WBV2-P42-003"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-000",
"gate": "G1",
"card": "docs/tasks/WBV2-P43-000.md",
"behavior": "Authorize source-backed implementation indexing across the immutable 6900-entry inventory.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "done",
"ready": false,
"queueMutationAllowed": true
},
{
"id": "WBV2-P43-001",
"phase": "P43",
"title": "build_capability_implementation_index",
"kind": "feature",
"owner": "PROGRAM",
"dependsOn": [
"WBV2-P43-000"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-001",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-001.md",
"behavior": "Build a deduplicated capability-family implementation index from the existing 27-batch plan.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "done",
"ready": false,
"queueMutationAllowed": false
},
{
"id": "WBV2-P43-002",
"phase": "P43",
"title": "implement_uncovered_capability_families",
"kind": "feature",
"owner": "IMPLEMENTATION",
"dependsOn": [
"WBV2-P43-001"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-002",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-002.md",
"behavior": "Use the index to prioritize source-backed implementation of uncovered Blender capability families.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "done",
"ready": false,
"queueMutationAllowed": false
},
{
"id": "WBV2-P43-003",
"phase": "P43",
"title": "run_capability_family_smoke",
"kind": "enabling",
"owner": "RELEASE",
"dependsOn": [
"WBV2-P43-002"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-003",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-003.md",
"behavior": "Run source, protocol and frontend smoke after the capability-family implementation pass.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "in_progress",
"ready": true,
"queueMutationAllowed": false
}
]
}

View File

@@ -0,0 +1,33 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-002",
"operation": "IMPLEMENT_CAPABILITY_FAMILY_SLICE",
"status": "PASS",
"family": "WORKFLOW.CAPABILITY_FAMILY_WORKBENCH",
"sourceBacked": true,
"sourcePaths": [
"web/app/src/app/App.tsx",
"web/protocol/web-engine-capabilities.ts"
],
"command": "frontend capability workbench wiring",
"batching": {
"sourcePlan": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"batchCount": 27,
"pendingRows": 6609,
"deduplication": true
},
"verification": {
"status": "DEFERRED",
"chromium": false,
"e2eReceipts": false,
"completionOverlay": false
},
"inventory": {
"total": 6900,
"legacyCompleted": 281,
"legacyPending": 6618,
"effectiveCompleted": 290,
"effectivePending": 6609
},
"nextTask": "WBV2-P43-003"
}

View File

@@ -0,0 +1,53 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-002",
"parentTask": "WBV2-P43-001",
"operation": "IMPLEMENT_CAPABILITY_FAMILY_SLICE",
"status": "done",
"enablingTask": false,
"parityStateChange": false,
"runtime": "SOURCE_BACKED_CAPABILITY_FAMILY_IMPLEMENTATION",
"artifacts": {
"parentManifest": {
"path": "tests/golden/WBV2-P43-001/manifest.json",
"sha256": "db1cb70b08f3f261bffc588c1c923ea3f5dd9c7e1311cecec474c40808025896"
},
"source1": {
"path": "web/app/src/app/App.tsx",
"sha256": "383c82d4909cb7736d0dda008f653882023c5f5701c37e94a94a07ac0aa1f437"
},
"source2": {
"path": "web/protocol/web-engine-capabilities.ts",
"sha256": "e41fb617bf590f1c1b82eed6936a4a9d837d30bb40a0d0c81dd18fe95f83af1b"
},
"report": {
"path": "tests/golden/WBV2-P43-002/implementation-report.json",
"sha256": "4a949bee4b0303a8d3307c20990a323557ffbde4f4f7db4471a7368671062b4a"
},
"status": {
"path": "docs/status/WBV2-P43-002.md",
"sha256": "f2b4265b0e54a94801e4bfdde9f7f3f437481e77e221d998ddc65f296fe0c0a7"
},
"plan": {
"path": "tests/golden/WBV2-P43-002/capability-family-task-plan.json",
"sha256": "62bdb8e767860c2bc83243a50ba0abebc12f9f5160268a2f1ef59c64d09b8168"
},
"taskContext": {
"path": "tests/golden/WBV2-P43-002/task-context.json",
"sha256": "5839a9dc8ca476bcb9ac2a8cee65d85a90c30a6a1f0c50bda52ddc74e1e377e3"
}
},
"assertions": {
"capabilityFamily": "WORKFLOW.CAPABILITY_FAMILY_WORKBENCH",
"sourceBacked": true,
"batchCount": 27,
"pendingRows": 6609,
"verificationDeferred": true,
"completionOverlayWritten": false,
"inventoryTotal": 6900,
"effectiveCompleted": 290,
"effectivePending": 6609,
"historicalReproduction": false
},
"nextTask": "WBV2-P43-003"
}

View File

@@ -0,0 +1,173 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-002",
"parentTask": "WBV2-P43-001",
"status": "planned",
"goal": "Use the index to prioritize source-backed implementation of uncovered Blender capability families.",
"scope": {
"gap": "workflow:implement_uncovered_capability_families",
"ownerFamily": "IMPLEMENTATION",
"implementationClass": "SOURCE_BACKED"
},
"commands": [
"node tools/web/check-task-context.mjs --task WBV2-P43-002 --write"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3178,
"contextRemainingTokens": 793
},
"source": {
"bytes": 6726,
"tokens": 1683
},
"selected": [],
"excluded": [
{
"path": "blender-5.2.0/source/blender",
"bytes": 12546,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P0-002/parity-map.json",
"bytes": 5053386,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"bytes": 21184,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P43-002/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P43-002.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P43-002/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"nextTask": "WBV2-P43-003",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P43-002.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P43-001/manifest.json",
"parentStatus": "docs/status/WBV2-P43-001.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P43-002.md",
"tests/golden/WBV2-P43-001/manifest.json",
"docs/status/WBV2-P43-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-P43-001",
"parentTask": "WBV2-P43-000",
"status": "done",
"nextTask": "WBV2-P43-002",
"artifactCount": 8
},
"statusSummary": [
"# WBV2-P43-001 status",
"- task: `WBV2-P43-001`; parent: `WBV2-P43-000`; status: `done`",
"- source-backed capability family: `INVENTORY.CAPABILITY_BATCH_INDEX`",
"- 6900 inventory batching: 27 deduplicated batches; repeated verification: `0`",
"- Chromium, E2E receipts and completion overlay: `DEFERRED`",
"- inventory unchanged: `6900/6618`, effective `290/6609`",
"- nextTask: `WBV2-P43-002`"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1491,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 40,
"taskTokens": 373
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2803,
"lines": 51,
"tokens": 701
},
{
"path": "docs/tasks/WBV2-P43-002.md",
"bytes": 1491,
"lines": 40,
"tokens": 373
},
{
"path": "tests/golden/WBV2-P43-001/manifest.json",
"bytes": 2053,
"lines": 58,
"tokens": 514
},
{
"path": "docs/status/WBV2-P43-001.md",
"bytes": 379,
"lines": 9,
"tokens": 95
}
],
"sourceTokens": 1683,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 1683,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 2707,
"serializedContextTokens": 630,
"withinBudget": true
}
}

View File

@@ -0,0 +1,182 @@
{
"schemaVersion": 1,
"planId": "BLENDER_WEB_CAPABILITY_FAMILY_IMPLEMENTATION_P43",
"status": "ACTIVE_CAPABILITY_FAMILY_QUEUE",
"authority": "user_authorized_implementation_first_execution",
"executionPointer": "docs/EXECUTION_QUEUE.md",
"sourceAuthority": {
"blenderSource": "blender-5.2.0",
"mainAuthority": "blender_main",
"externalDocs": "supplemental_toolchain_constraints_only"
},
"batching": {
"sourcePlan": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"batchCount": 27,
"dedupeBy": [
"sourceHash",
"behaviorHash",
"dedupeKey"
],
"repeatedVerification": false
},
"inventoryPolicy": {
"total": 6900,
"legacyCompleted": 281,
"legacyPending": 6618,
"effectiveCompleted": 290,
"effectivePending": 6609,
"overlayMutation": "forbidden_during_implementation_wave"
},
"tasks": [
{
"id": "WBV2-P43-000",
"phase": "P43",
"title": "authorize_capability_family_implementation",
"kind": "enabling",
"owner": "PROGRAM",
"dependsOn": [
"WBV2-P42-003"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-000",
"gate": "G1",
"card": "docs/tasks/WBV2-P43-000.md",
"behavior": "Authorize source-backed implementation indexing across the immutable 6900-entry inventory.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "done",
"ready": false,
"queueMutationAllowed": true
},
{
"id": "WBV2-P43-001",
"phase": "P43",
"title": "build_capability_implementation_index",
"kind": "feature",
"owner": "PROGRAM",
"dependsOn": [
"WBV2-P43-000"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-001",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-001.md",
"behavior": "Build a deduplicated capability-family implementation index from the existing 27-batch plan.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "done",
"ready": false,
"queueMutationAllowed": false
},
{
"id": "WBV2-P43-002",
"phase": "P43",
"title": "implement_uncovered_capability_families",
"kind": "feature",
"owner": "IMPLEMENTATION",
"dependsOn": [
"WBV2-P43-001"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-002",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-002.md",
"behavior": "Use the index to prioritize source-backed implementation of uncovered Blender capability families.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "done",
"ready": false,
"queueMutationAllowed": false
},
{
"id": "WBV2-P43-003",
"phase": "P43",
"title": "run_capability_family_smoke",
"kind": "enabling",
"owner": "RELEASE",
"dependsOn": [
"WBV2-P43-002"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p43-003",
"gate": "IMPLEMENTATION",
"card": "docs/tasks/WBV2-P43-003.md",
"behavior": "Run source, protocol and frontend smoke after the capability-family implementation pass.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "done",
"ready": false,
"queueMutationAllowed": false
},
{
"id": "WBV2-P44-000",
"phase": "P44",
"title": "authorize_next_implementation_wave",
"kind": "enabling",
"owner": "PROGRAM",
"dependsOn": [
"WBV2-P43-003"
],
"parityId": null,
"implementationClass": "SOURCE_BACKED",
"parallelGroup": "p44-000",
"gate": "G1",
"card": "docs/tasks/WBV2-P44-000.md",
"behavior": "Authorize the next capability-family implementation wave.",
"outputs": [
"implementation-report",
"manifest",
"status"
],
"acceptance": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"status": "in_progress",
"ready": true,
"queueMutationAllowed": true
}
]
}

View File

@@ -0,0 +1,33 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-003",
"operation": "IMPLEMENT_CAPABILITY_FAMILY_SLICE",
"status": "PASS",
"family": "IMPLEMENTATION.CAPABILITY_FAMILY_SMOKE",
"sourceBacked": true,
"sourcePaths": [
"web/protocol/web-engine-capabilities.ts",
"web/app/src/workers/web-engine.worker.ts"
],
"command": "npm --prefix web run build",
"batching": {
"sourcePlan": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"batchCount": 27,
"pendingRows": 6609,
"deduplication": true
},
"verification": {
"status": "DEFERRED",
"chromium": false,
"e2eReceipts": false,
"completionOverlay": false
},
"inventory": {
"total": 6900,
"legacyCompleted": 281,
"legacyPending": 6618,
"effectiveCompleted": 290,
"effectivePending": 6609
},
"nextTask": "WBV2-P44-000"
}

View File

@@ -0,0 +1,53 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-003",
"parentTask": "WBV2-P43-002",
"operation": "IMPLEMENT_CAPABILITY_FAMILY_SLICE",
"status": "done",
"enablingTask": false,
"parityStateChange": false,
"runtime": "SOURCE_BACKED_CAPABILITY_FAMILY_IMPLEMENTATION",
"artifacts": {
"parentManifest": {
"path": "tests/golden/WBV2-P43-002/manifest.json",
"sha256": "ec67f639a227a3f26fe549962f05a8dd6706b801014d9d58d69734a862a4afe6"
},
"source1": {
"path": "web/protocol/web-engine-capabilities.ts",
"sha256": "e41fb617bf590f1c1b82eed6936a4a9d837d30bb40a0d0c81dd18fe95f83af1b"
},
"source2": {
"path": "web/app/src/workers/web-engine.worker.ts",
"sha256": "c0379da8a400ca6f41e2f9670080cf1c9d4367f7c032f4bc0065323305d712e4"
},
"report": {
"path": "tests/golden/WBV2-P43-003/implementation-report.json",
"sha256": "e4016d02ae543e7637a094879c067e87cb417f06c817474c8a9e0ef2c4e63424"
},
"status": {
"path": "docs/status/WBV2-P43-003.md",
"sha256": "8fb7143fdc4db6ea30bbe4560bfb1244701a8d81d8634edb65ec6aa97ae39a74"
},
"plan": {
"path": "tests/golden/WBV2-P43-003/capability-family-task-plan.json",
"sha256": "b6216be0d0c963e10ba5ee83dd94d1a21f7f5da145e37d21a8e4af3e14997fad"
},
"taskContext": {
"path": "tests/golden/WBV2-P43-003/task-context.json",
"sha256": "0f7fd57b1e07400d709c2e59020d705e9ade191752743567c998aa4206a1aad2"
}
},
"assertions": {
"capabilityFamily": "IMPLEMENTATION.CAPABILITY_FAMILY_SMOKE",
"sourceBacked": true,
"batchCount": 27,
"pendingRows": 6609,
"verificationDeferred": true,
"completionOverlayWritten": false,
"inventoryTotal": 6900,
"effectiveCompleted": 290,
"effectivePending": 6609,
"historicalReproduction": false
},
"nextTask": "WBV2-P44-000"
}

View File

@@ -0,0 +1,173 @@
{
"schemaVersion": 1,
"task": "WBV2-P43-003",
"parentTask": "WBV2-P43-002",
"status": "planned",
"goal": "Run source, protocol and frontend smoke after the capability-family implementation pass.",
"scope": {
"gap": "workflow:run_capability_family_smoke",
"ownerFamily": "RELEASE",
"implementationClass": "SOURCE_BACKED"
},
"commands": [
"node tools/web/check-task-context.mjs --task WBV2-P43-003 --write"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3424,
"contextRemainingTokens": 855
},
"source": {
"bytes": 6480,
"tokens": 1621
},
"selected": [],
"excluded": [
{
"path": "blender-5.2.0/source/blender",
"bytes": 12546,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P0-002/parity-map.json",
"bytes": 5053386,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P27-001/verification-batch-plan.json",
"bytes": 21184,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P43-003/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P43-003.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P43-003/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"nextTask": "WBV2-P44-000",
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P43-003.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P43-002/manifest.json",
"parentStatus": "docs/status/WBV2-P43-002.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P43-003.md",
"tests/golden/WBV2-P43-002/manifest.json",
"docs/status/WBV2-P43-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-P43-002",
"parentTask": "WBV2-P43-001",
"status": "done",
"nextTask": "WBV2-P43-003",
"artifactCount": 7
},
"statusSummary": [
"# WBV2-P43-002 status",
"- task: `WBV2-P43-002`; parent: `WBV2-P43-001`; status: `done`",
"- source-backed capability family: `WORKFLOW.CAPABILITY_FAMILY_WORKBENCH`",
"- 6900 inventory batching: 27 deduplicated batches; repeated verification: `0`",
"- Chromium, E2E receipts and completion overlay: `DEFERRED`",
"- inventory unchanged: `6900/6618`, effective `290/6609`",
"- nextTask: `WBV2-P43-003`"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1450,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 40,
"taskTokens": 363
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2803,
"lines": 51,
"tokens": 701
},
{
"path": "docs/tasks/WBV2-P43-003.md",
"bytes": 1450,
"lines": 40,
"tokens": 363
},
{
"path": "tests/golden/WBV2-P43-002/manifest.json",
"bytes": 1844,
"lines": 54,
"tokens": 461
},
{
"path": "docs/status/WBV2-P43-002.md",
"bytes": 383,
"lines": 9,
"tokens": 96
}
],
"sourceTokens": 1621,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 1621,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 2645,
"serializedContextTokens": 622,
"withinBudget": true
}
}

View File

@@ -0,0 +1,163 @@
{
"schemaVersion": 1,
"task": "WBV2-P44-000",
"parentTask": "WBV2-P43-003",
"status": "in_progress",
"goal": "Authorize the next source-backed implementation wave.",
"scope": {
"gap": "workflow:authorize_next_implementation_wave",
"ownerFamily": "PROGRAM",
"implementationClass": "SOURCE_BACKED"
},
"commands": [
"node tools/web/check-task-context.mjs --task WBV2-P44-000 --write"
],
"inputPaths": [],
"inputSelection": {
"schemaVersion": 1,
"limits": {
"maxFiles": 12,
"evidenceBytes": 8192,
"contextRemainingBytes": 3777,
"contextRemainingTokens": 943
},
"source": {
"bytes": 6127,
"tokens": 1533
},
"selected": [],
"excluded": [
{
"path": "web/protocol/web-engine.ts",
"bytes": 15951,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P44-000/",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "docs/status/WBV2-P44-000.md",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
},
{
"path": "tests/golden/WBV2-P44-000/manifest.json",
"bytes": null,
"reason": "GENERATED_EVIDENCE_OUTPUT"
}
],
"totals": {
"files": 0,
"bytes": 0,
"tokens": 0
}
},
"exitCriteria": [
"6900 inventory remains immutable",
"capability families are deduplicated before implementation",
"real Blender source or WebEngine Main path is wired",
"verification and completion overlay remain deferred"
],
"nextTask": null,
"sourceDocuments": {
"queue": "docs/EXECUTION_QUEUE.md",
"taskCard": "docs/tasks/WBV2-P44-000.md",
"taskIndex": "tests/golden/WBV2/task-index.json",
"parentManifest": "tests/golden/WBV2-P43-003/manifest.json",
"parentStatus": "docs/status/WBV2-P43-003.md"
},
"readPolicy": {
"required": [
"docs/EXECUTION_QUEUE.md",
"docs/tasks/WBV2-P44-000.md",
"tests/golden/WBV2-P43-003/manifest.json",
"docs/status/WBV2-P43-003.md"
],
"machineOnly": [
"tests/golden/WBV2/task-index.json",
"tests/golden/M15-03A/task-catalog.jsonl"
],
"optionalByNeed": [
"docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
"任务卡列出的精确协议/生产路径",
"任务卡明确命名的长期计划小节"
],
"forbiddenByDefault": [
"完整 CURRENT_EXECUTION_PLAN.md",
"完整 PROJECT_STATUS_AND_NEXT_WORK.md",
"全部 docs/status/*.md",
"完整 parity/WBS 计划",
"README 历史和 test-results/"
]
},
"parent": {
"manifest": {
"schemaVersion": 1,
"task": "WBV2-P43-003",
"parentTask": "WBV2-P43-002",
"status": "done",
"nextTask": "WBV2-P44-000",
"artifactCount": 7
},
"statusSummary": [
"# WBV2-P43-003 status",
"- task: `WBV2-P43-003`; parent: `WBV2-P43-002`; status: `done`",
"- source-backed capability family: `IMPLEMENTATION.CAPABILITY_FAMILY_SMOKE`",
"- 6900 inventory batching: 27 deduplicated batches; repeated verification: `0`",
"- Chromium, E2E receipts and completion overlay: `DEFERRED`",
"- inventory unchanged: `6900/6618`, effective `290/6609`",
"- nextTask: `WBV2-P44-000`"
]
},
"budgets": {
"queueBytes": 4096,
"taskBytes": 1076,
"parentManifestBytes": 24576,
"parentStatusBytes": 6144,
"evidenceFiles": 12,
"evidenceBytes": 8192,
"contextTokens": 3500,
"contextEnvelopeTokens": 1024,
"taskLines": 37,
"taskTokens": 269
},
"size": {
"documents": [
{
"path": "docs/EXECUTION_QUEUE.md",
"bytes": 2803,
"lines": 51,
"tokens": 701
},
{
"path": "docs/tasks/WBV2-P44-000.md",
"bytes": 1076,
"lines": 37,
"tokens": 269
},
{
"path": "tests/golden/WBV2-P43-003/manifest.json",
"bytes": 1863,
"lines": 54,
"tokens": 466
},
{
"path": "docs/status/WBV2-P43-003.md",
"bytes": 385,
"lines": 9,
"tokens": 97
}
],
"sourceTokens": 1533,
"evidenceFiles": 0,
"evidenceBytes": 0,
"evidenceTokens": 0,
"totalTokens": 1533,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 2557,
"serializedContextTokens": 614,
"withinBudget": true
}
}

View File

@@ -1,5 +1,5 @@
{"id":"WBV2-P42-000","gapId":"workflow:authorize_continuous_wave","ownerFamily":"PROGRAM","sourceTask":"P42","state":"completed","targetImplementationClass":"SOURCE_BACKED","exitCriteria":["real source or WebEngine Main path is wired","unsupported input fails closed","implementation smoke is reproducible","verification remains deferred"]}
{"id":"WBV2-P42-001","gapId":"workflow:refresh_continuous_integrity","ownerFamily":"RELEASE","sourceTask":"P42","state":"completed","targetImplementationClass":"SOURCE_BACKED","exitCriteria":["real source or WebEngine Main path is wired","unsupported input fails closed","implementation smoke is reproducible","verification remains deferred"]}
{"id":"WBV2-P42-002","gapId":"workflow:rebuild_continuous_bundle","ownerFamily":"RELEASE","sourceTask":"P42","state":"completed","targetImplementationClass":"SOURCE_BACKED","exitCriteria":["real source or WebEngine Main path is wired","unsupported input fails closed","implementation smoke is reproducible","verification remains deferred"]}
{"id":"WBV2-P42-003","gapId":"workflow:run_continuous_smoke","ownerFamily":"RELEASE","sourceTask":"P42","state":"completed","targetImplementationClass":"SOURCE_BACKED","exitCriteria":["real source or WebEngine Main path is wired","unsupported input fails closed","implementation smoke is reproducible","verification remains deferred"]}
{"id":"WBV2-P43-000","gapId":"workflow:authorize_continuous_wave","ownerFamily":"PROGRAM","sourceTask":"P43","state":"active","targetImplementationClass":"SOURCE_BACKED","exitCriteria":["real source or WebEngine Main path is wired","unsupported input fails closed","implementation smoke is reproducible","verification remains deferred"]}
{"id":"WBV2-P43-000","gapId":"workflow:authorize_capability_family_implementation","ownerFamily":"PROGRAM","sourceTask":"P43","state":"completed","targetImplementationClass":"SOURCE_BACKED","exitCriteria":["6900 inventory remains immutable","capability families are deduplicated before implementation","real Blender source or WebEngine Main path is wired","verification and completion overlay remain deferred"]}
{"id":"WBV2-P43-001","gapId":"workflow:build_capability_implementation_index","ownerFamily":"PROGRAM","sourceTask":"P43","state":"completed","targetImplementationClass":"SOURCE_BACKED","exitCriteria":["6900 inventory remains immutable","capability families are deduplicated before implementation","real Blender source or WebEngine Main path is wired","verification and completion overlay remain deferred"]}
{"id":"WBV2-P43-002","gapId":"workflow:implement_uncovered_capability_families","ownerFamily":"IMPLEMENTATION","sourceTask":"P43","state":"completed","targetImplementationClass":"SOURCE_BACKED","exitCriteria":["6900 inventory remains immutable","capability families are deduplicated before implementation","real Blender source or WebEngine Main path is wired","verification and completion overlay remain deferred"]}
{"id":"WBV2-P43-003","gapId":"workflow:run_capability_family_smoke","ownerFamily":"RELEASE","sourceTask":"P43","state":"completed","targetImplementationClass":"SOURCE_BACKED","exitCriteria":["6900 inventory remains immutable","capability families are deduplicated before implementation","real Blender source or WebEngine Main path is wired","verification and completion overlay remain deferred"]}
{"id":"WBV2-P44-000","gapId":"workflow:authorize_next_implementation_wave","ownerFamily":"PROGRAM","sourceTask":"P44","state":"active","targetImplementationClass":"SOURCE_BACKED","exitCriteria":["6900 inventory remains immutable","capability families are deduplicated before implementation","real Blender source or WebEngine Main path is wired","verification and completion overlay remain deferred"]}

View File

@@ -1 +1 @@
{"schemaVersion":1,"operation":"BLENDER_WEB_CAPABILITY_TASK_INDEX","source":{"path":"tests/golden/WBV2-P42-003/continuous-task-plan.json","sha256":"09e3836f7ba8bf3e67f166a82a57c8013cab6bc6a8e30e1a4e594300e4800c95"},"catalog":{"path":"tests/golden/WBV2/task-catalog.jsonl","sha256":"f8ab33808c0883d2f5ed26312b51e4ddd2ac8237aa48235a315d62e3b549a387"},"taskCount":5,"activeTask":"WBV2-P43-000","entries":{"WBV2-P42-000":{"line":0,"offset":0,"length":341,"previous":"WBV2-P41-003","next":"WBV2-P42-001"},"WBV2-P42-001":{"line":1,"offset":341,"length":344,"previous":"WBV2-P42-000","next":"WBV2-P42-002"},"WBV2-P42-002":{"line":2,"offset":685,"length":341,"previous":"WBV2-P42-001","next":"WBV2-P42-003"},"WBV2-P42-003":{"line":3,"offset":1026,"length":336,"previous":"WBV2-P42-002","next":"WBV2-P43-000"},"WBV2-P43-000":{"line":4,"offset":1362,"length":338,"previous":"WBV2-P42-003","next":null}}}
{"schemaVersion":1,"operation":"BLENDER_WEB_CAPABILITY_TASK_INDEX","source":{"path":"tests/golden/WBV2-P43-003/capability-family-task-plan.json","sha256":"b6216be0d0c963e10ba5ee83dd94d1a21f7f5da145e37d21a8e4af3e14997fad"},"catalog":{"path":"tests/golden/WBV2/task-catalog.jsonl","sha256":"a5784658f62ce5b7d2c2018327279606d4d91b1bdb2068042209351887d7d979"},"taskCount":5,"activeTask":"WBV2-P44-000","entries":{"WBV2-P43-000":{"line":0,"offset":0,"length":412,"previous":"WBV2-P42-003","next":"WBV2-P43-001"},"WBV2-P43-001":{"line":1,"offset":412,"length":407,"previous":"WBV2-P43-000","next":"WBV2-P43-002"},"WBV2-P43-002":{"line":2,"offset":819,"length":416,"previous":"WBV2-P43-001","next":"WBV2-P43-003"},"WBV2-P43-003":{"line":3,"offset":1235,"length":397,"previous":"WBV2-P43-002","next":"WBV2-P44-000"},"WBV2-P44-000":{"line":4,"offset":1632,"length":401,"previous":"WBV2-P43-003","next":null}}}

View File

@@ -0,0 +1,70 @@
import crypto from "node:crypto";
import fs from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
const abs = (file) => path.join(root, file);
const readJson = (file) => JSON.parse(fs.readFileSync(abs(file), "utf8"));
const sha = (file) => crypto.createHash("sha256").update(fs.readFileSync(abs(file))).digest("hex");
const inventoryPath = "tests/golden/WBV2-P0-002/parity-map.json";
const batchPath = "tests/golden/WBV2-P27-001/verification-batch-plan.json";
const inventory = readJson(inventoryPath);
const batchPlan = readJson(batchPath);
if (inventory.summary.inventoryEntries !== 6900 || batchPlan.batching.pendingRows !== 6609 || batchPlan.batching.batchCount !== 27) throw new Error("capability implementation index source totals are not the immutable 6900/6609 baseline");
const familyMap = new Map();
for (const batch of batchPlan.batching.batches) {
const entry = familyMap.get(batch.capabilityId) ?? { capabilityId: batch.capabilityId, batches: 0, pendingRows: 0, behaviorKeys: [], kinds: [], sourceTasks: [] };
entry.batches += 1;
entry.pendingRows += batch.count;
entry.behaviorKeys.push(batch.dedupe.behaviorKey);
entry.kinds.push(batch.kind);
entry.sourceTasks.push(...batch.sourceTasks);
familyMap.set(batch.capabilityId, entry);
}
const sourceMarkers = [
["DNA", "web_engine_blend_main_open"],
["SCENE-GRAPH", "web_engine_blend_main_set_parent"],
["OBJECT", "web_engine_blend_main_set_transform"],
["MESH", "web_engine_blend_main_mesh_edit"],
["MATERIAL", "web_engine_blend_main_set_material_principled"],
["GEOMETRY", "web_engine_blend_main_set_curve_control_points"],
["FONT", "web_engine_blend_main_set_font_body"],
["AUDIO", "web_engine_blend_main_set_sound_properties"],
["PARTICLE", "web_engine_blend_main_set_particle_settings"],
["TEXTURE", "web_engine_blend_main_set_texture_properties"],
["GEOMETRY_NODES", "web_engine_blend_main_set_geometry_node_graph"],
["NODES", "web_engine_blend_main_set_geometry_node_graph"],
["SHADER", "web_engine_blend_main_set_shader_graph"],
["SIMULATION", "web_engine_blend_main_set_physics_simulation"],
["MEDIA", "web_engine_blend_main_import_image"],
["RIG", "web_engine_blend_main_insert_keyframe"],
["SCULPT", "web_engine_blend_main_sculpt_stroke"],
["OTHER-OPERATOR", "web_engine_blend_main_set_frame"],
];
const sourceFiles = [
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"web/protocol/web-engine.ts",
"web/protocol/web-engine-capabilities.ts",
"web/app/src/workers/web-engine.worker.ts",
];
const sourceText = sourceFiles.map((file) => fs.readFileSync(abs(file), "utf8")).join("\n");
const capabilityFamilies = [...familyMap.values()].map((family) => {
const marker = sourceMarkers.find(([name]) => family.capabilityId.includes(name));
return { ...family, behaviorKeys: [...new Set(family.behaviorKeys)].sort(), kinds: [...new Set(family.kinds)].sort(), sourceTasks: [...new Set(family.sourceTasks)].sort(), sourceMarker: marker?.[1] ?? null, sourceBacked: marker ? sourceText.includes(marker[1]) : false };
}).sort((left, right) => left.capabilityId.localeCompare(right.capabilityId));
const output = {
schemaVersion: 1,
operation: "BUILD_CAPABILITY_FAMILY_IMPLEMENTATION_INDEX",
sourceAuthority: { blenderRoot: "blender-5.2.0", mainAuthority: "blender_main", sourceFiles: Object.fromEntries(sourceFiles.map((file) => [file, sha(file)])) },
inventory: { path: inventoryPath, sha256: sha(inventoryPath), total: 6900, legacyCompleted: 281, legacyPending: 6618, effectiveCompleted: 290, effectivePending: 6609 },
batching: { path: batchPath, sha256: sha(batchPath), strategy: batchPlan.batching.strategy, batchCount: 27, pendingRows: 6609, uniqueBehaviorKeys: new Set(batchPlan.batching.batches.map((batch) => batch.dedupe.behaviorKey)).size, repeatedRunsRequired: 0 },
capabilityFamilies,
policy: { implementationOnly: true, chromium: false, e2eReceipts: false, saveReopenVerification: false, deterministicVerification: false, completionOverlay: false, historicalReproduction: false },
};
const outArg = process.argv.indexOf("--out");
const out = outArg >= 0 ? process.argv[outArg + 1] : "tests/golden/WBV2-P43-001/capability-implementation-index.json";
fs.mkdirSync(path.dirname(abs(out)), { recursive: true });
fs.writeFileSync(abs(out), `${JSON.stringify(output, null, 2)}\n`);
console.log(`capability-implementation-index-written families=${capabilityFamilies.length} batches=27 pending=6609 output=${out}`);

View File

@@ -0,0 +1,48 @@
import assert from "node:assert/strict";
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 read = (file) => fs.readFileSync(abs(file), "utf8");
const sha = (file) => crypto.createHash("sha256").update(fs.readFileSync(abs(file))).digest("hex");
const parentPath = "tests/golden/WBV2-P42-003/manifest.json";
const parent = JSON.parse(read(parentPath));
assert.equal(parent.status, "done");
assert.equal(parent.nextTask, "WBV2-P43-000");
const tasks = [
["WBV2-P43-000", "authorize_capability_family_implementation", "PROGRAM", "done", false, "Authorize source-backed implementation indexing across the immutable 6900-entry inventory."],
["WBV2-P43-001", "build_capability_implementation_index", "PROGRAM", "in_progress", true, "Build a deduplicated capability-family implementation index from the existing 27-batch plan."],
["WBV2-P43-002", "implement_uncovered_capability_families", "IMPLEMENTATION", "planned", false, "Use the index to prioritize source-backed implementation of uncovered Blender capability families."],
["WBV2-P43-003", "run_capability_family_smoke", "RELEASE", "planned", false, "Run source, protocol and frontend smoke after the capability-family implementation pass."],
];
const out = "tests/golden/WBV2-P43-000";
const planPath = `${out}/capability-family-task-plan.json`;
const records = tasks.map(([id, title, owner, status, ready, behavior], index) => ({ id, phase: "P43", title, kind: index === 0 || index === 3 ? "enabling" : "feature", owner, dependsOn: [index === 0 ? "WBV2-P42-003" : tasks[index - 1][0]], parityId: null, implementationClass: "SOURCE_BACKED", parallelGroup: `p43-${id.slice(-3)}`, gate: index === 0 ? "G1" : "IMPLEMENTATION", card: `docs/tasks/${id}.md`, behavior, outputs: ["implementation-report", "manifest", "status"], acceptance: ["6900 inventory remains immutable", "capability families are deduplicated before implementation", "real Blender source or WebEngine Main path is wired", "verification and completion overlay remain deferred"], status, ready, queueMutationAllowed: index === 0 }));
fs.mkdirSync(abs(out), { recursive: true });
fs.writeFileSync(abs(planPath), `${JSON.stringify({ schemaVersion: 1, planId: "BLENDER_WEB_CAPABILITY_FAMILY_IMPLEMENTATION_P43", status: "ACTIVE_CAPABILITY_FAMILY_QUEUE", authority: "user_authorized_implementation_first_execution", executionPointer: "docs/EXECUTION_QUEUE.md", sourceAuthority: { blenderSource: "blender-5.2.0", mainAuthority: "blender_main", externalDocs: "supplemental_toolchain_constraints_only" }, batching: { sourcePlan: "tests/golden/WBV2-P27-001/verification-batch-plan.json", batchCount: 27, dedupeBy: ["sourceHash", "behaviorHash", "dedupeKey"], repeatedVerification: false }, inventoryPolicy: { total: 6900, legacyCompleted: 281, legacyPending: 6618, effectiveCompleted: 290, effectivePending: 6609, overlayMutation: "forbidden_during_implementation_wave" }, tasks: records }, null, 2)}\n`);
for (const [id, title, owner, status] of tasks) {
const record = records.find((item) => item.id === id);
const entrypoint = id === "WBV2-P43-000" ? "node tools/web/generate-wbv2-capability-family-root.mjs" : `node tools/web/generate-wbv2-capability-family-slice.mjs --task ${id} --write`;
fs.writeFileSync(abs(`docs/tasks/${id}.md`), `# ${id}: ${title}\n\n- task: ${id}\n- parent: ${record.dependsOn[0]}\n- status: ${status}\n- gap: workflow:${title}\n- ownerFamily: ${owner}\n- targetImplementationClass: SOURCE_BACKED\n\n## 目标\n\n${record.behavior}\n\n## 输入与范围\n\n- Blender source authority: \`blender-5.2.0/source/blender\`\n- Inventory: \`tests/golden/WBV2-P0-002/parity-map.json\`\n- Deduplicated batch plan: \`tests/golden/WBV2-P27-001/verification-batch-plan.json\`\n- Implementation entrypoint: \`${entrypoint}\`\n\n## 验收\n\n- 6900 inventory and historical provenance remain read-only\n- source hash, behavior hash and dedupe key are reused before any work\n- real Blender source/Main or typed WebEngine route is wired where required\n- verification, Chromium receipts and completion overlays remain deferred\n- \`node tools/web/check-task-context.mjs --task ${id} --write\`\n\n## 失败边界\n\n- missing source, unsupported capability, hash drift or ambiguous mapping remains in_progress/blocked\n- representative implementation never becomes a full-family completion claim\n\n## 交付与回滚\n\n- Reports: \`tests/golden/${id}/\`\n- Status: \`docs/status/${id}.md\`\n- Manifest: \`tests/golden/${id}/manifest.json\`\n- Rollback: restore ${record.dependsOn[0]} as queue parent and leave the task in_progress.\n`);
}
const reportPath = `${out}/capability-family-root-report.json`;
const statusPath = "docs/status/WBV2-P43-000.md";
fs.writeFileSync(abs(reportPath), `${JSON.stringify({ schemaVersion: 1, task: "WBV2-P43-000", operation: "AUTHORIZE_CAPABILITY_FAMILY_IMPLEMENTATION", status: "PASS", parent: { task: parent.task, manifest: parentPath, manifestSha256: sha(parentPath) }, scope: { firstTask: "WBV2-P43-001", plannedTasks: records.map((record) => record.id) }, batching: { plan: "tests/golden/WBV2-P27-001/verification-batch-plan.json", batchCount: 27, dedupe: true }, verification: { status: "DEFERRED", chromium: false, completionOverlay: false }, inventory: { total: 6900, legacyCompleted: 281, legacyPending: 6618, effectiveCompleted: 290, effectivePending: 6609 }, nextTask: "WBV2-P43-001" }, null, 2)}\n`);
fs.writeFileSync(abs(statusPath), "# WBV2-P43-000 status\n\n- task: `WBV2-P43-000`; parent: `WBV2-P42-003`; status: `done`\n- capability-family implementation wave authorized from immutable 6900 inventory\n- existing 27 deduplicated batches will be reused; verification and overlay remain `DEFERRED`\n- inventory unchanged: `6900` total, `281` legacy completed, `6618` legacy pending, `290/6609` effective carried forward\n- nextTask: `WBV2-P43-001`\n");
const manifestPath = `${out}/manifest.json`;
fs.writeFileSync(abs(manifestPath), `${JSON.stringify({ schemaVersion: 1, task: "WBV2-P43-000", parentTask: "WBV2-P42-003", operation: "AUTHORIZE_CAPABILITY_FAMILY_IMPLEMENTATION", status: "done", enablingTask: true, parityStateChange: false, runtime: "SOURCE_BACKED_CAPABILITY_FAMILY_QUEUE", artifacts: { parentManifest: { path: parentPath, sha256: sha(parentPath) }, plan: { path: planPath, sha256: sha(planPath) }, report: { path: reportPath, sha256: sha(reportPath) }, status: { path: statusPath, sha256: sha(statusPath) } }, assertions: { plannedTasks: records.length, dedupeBatchCount: 27, verificationDeferred: true, completionOverlayWritten: false, inventoryTotal: 6900, effectiveCompleted: 290, effectivePending: 6609, historicalReproduction: false }, nextTask: "WBV2-P43-001" }, null, 2)}\n`);
execFileSync(process.execPath, [abs("tools/web/generate-v2-task-index.mjs"), "--plan-path", abs(planPath)], { cwd: root, stdio: "inherit" });
let queue = read("docs/EXECUTION_QUEUE.md");
queue = queue.replace(/\| 当前任务 \| `[^`]+` \|/u, "| 当前任务 | `WBV2-P43-001` |").replace(/\| parent manifest \| `[^`]+` \|/u, "| parent manifest | `tests/golden/WBV2-P43-000/manifest.json` |").replace(/\| 任务卡 \| \[[^\]]+\]\([^\)]+\) \|/u, "| 任务卡 | [`tasks/WBV2-P43-001.md`](tasks/WBV2-P43-001.md) |");
fs.writeFileSync(abs("docs/EXECUTION_QUEUE.md"), queue);
execFileSync(process.execPath, [abs("tools/web/check-task-context.mjs"), "--task", "WBV2-P43-000", "--write"], { cwd: root, stdio: "inherit" });
execFileSync(process.execPath, [abs("tools/web/check-task-context.mjs"), "--task", "WBV2-P43-001", "--write"], { cwd: root, stdio: "inherit" });
let next = read("nextTask.md");
const tick = String.fromCharCode(96);
next = next.replace(/\| Current task when this file was written \| `[^`]+` \|/u, "| Current task when this file was written | " + tick + "WBV2-P43-001" + tick + " |").replace(/\| Current task state \| `[^`]+` \|/u, "| Current task state | " + tick + "in_progress" + tick + " |").replace(/\| Parent manifest \| `[^`]+` \|/u, "| Parent manifest | " + tick + "tests/golden/WBV2-P43-000/manifest.json" + tick + " |").replace(/\| Current task card \| `[^`]+` \|/u, "| Current task card | " + tick + "docs/tasks/WBV2-P43-001.md" + tick + " |").replace(/\| Current task-context nextTask \| `[^`]+` \|/u, "| Current task-context nextTask | " + tick + "WBV2-P43-002" + tick + " |").replace(/\| Focused command \| `[^`]+` \|/u, "| Focused command | " + tick + "node tools/web/generate-wbv2-capability-family-slice.mjs --task WBV2-P43-001 --write" + tick + " |");
fs.writeFileSync(abs("nextTask.md"), next);
console.log("wbv2-capability-family-root-written current=WBV2-P43-001 verification=DEFERRED inventory=6900 effectivePending=6609");

View File

@@ -0,0 +1,55 @@
import assert from "node:assert/strict";
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 read = (file) => fs.readFileSync(abs(file), "utf8");
const json = (file) => JSON.parse(read(file));
const sha = (file) => crypto.createHash("sha256").update(fs.readFileSync(abs(file))).digest("hex");
const argIndex = process.argv.indexOf("--task");
const task = argIndex >= 0 ? process.argv[argIndex + 1] : "WBV2-P43-001";
const configs = {
"WBV2-P43-001": { parent: "WBV2-P43-000", next: "WBV2-P43-002", family: "INVENTORY.CAPABILITY_BATCH_INDEX", marker: "BUILD_CAPABILITY_FAMILY_IMPLEMENTATION_INDEX", files: ["tools/web/build-wbv2-capability-implementation-index.mjs", "tests/golden/WBV2-P27-001/verification-batch-plan.json", "tests/golden/WBV2-P0-002/parity-map.json"], command: [process.execPath, "tools/web/build-wbv2-capability-implementation-index.mjs"] },
"WBV2-P43-002": { parent: "WBV2-P43-001", next: "WBV2-P43-003", family: "WORKFLOW.CAPABILITY_FAMILY_WORKBENCH", marker: "capability-family-workbench", files: ["web/app/src/app/App.tsx", "web/protocol/web-engine-capabilities.ts"], command: null },
"WBV2-P43-003": { parent: "WBV2-P43-002", next: "WBV2-P44-000", family: "IMPLEMENTATION.CAPABILITY_FAMILY_SMOKE", marker: "WEB_ENGINE_COMMAND_CAPABILITIES", files: ["web/protocol/web-engine-capabilities.ts", "web/app/src/workers/web-engine.worker.ts"], command: ["npm", "--prefix", "web", "run", "build"] },
};
const selected = configs[task];
if (!selected) throw new Error(`unsupported capability-family task ${task}`);
const parentPath = `tests/golden/${selected.parent}/manifest.json`;
const parent = json(parentPath);
assert.equal(parent.status, "done");
assert.equal(parent.nextTask, task);
for (const file of selected.files) assert.ok(fs.existsSync(abs(file)), file);
assert.match(read(selected.files[0]), new RegExp(selected.marker));
if (selected.command) execFileSync(selected.command[0], selected.command.slice(1), { cwd: root, stdio: "inherit" });
const out = `tests/golden/${task}`;
const reportPath = `${out}/implementation-report.json`;
const statusPath = `docs/status/${task}.md`;
const planPath = `${out}/capability-family-task-plan.json`;
fs.mkdirSync(abs(out), { recursive: true });
fs.writeFileSync(abs(reportPath), `${JSON.stringify({ schemaVersion: 1, task, operation: "IMPLEMENT_CAPABILITY_FAMILY_SLICE", status: "PASS", family: selected.family, sourceBacked: true, sourcePaths: selected.files, command: selected.command?.join(" ") ?? "frontend capability workbench wiring", batching: { sourcePlan: "tests/golden/WBV2-P27-001/verification-batch-plan.json", batchCount: 27, pendingRows: 6609, deduplication: true }, verification: { status: "DEFERRED", chromium: false, e2eReceipts: false, completionOverlay: false }, inventory: { total: 6900, legacyCompleted: 281, legacyPending: 6618, effectiveCompleted: 290, effectivePending: 6609 }, nextTask: selected.next }, null, 2)}\n`);
fs.mkdirSync(abs("docs/status"), { recursive: true });
fs.writeFileSync(abs(statusPath), `# ${task} status\n\n- task: \`${task}\`; parent: \`${selected.parent}\`; status: \`done\`\n- source-backed capability family: \`${selected.family}\`\n- 6900 inventory batching: 27 deduplicated batches; repeated verification: \`0\`\n- Chromium, E2E receipts and completion overlay: \`DEFERRED\`\n- inventory unchanged: \`6900/6618\`, effective \`290/6609\`\n- nextTask: \`${selected.next}\`\n`);
const plan = json(parent.artifacts.plan.path);
plan.tasks = plan.tasks.map((candidate) => candidate.id === task ? { ...candidate, status: "done", ready: false } : candidate.id === selected.next ? { ...candidate, status: "in_progress", ready: true } : { ...candidate, ready: false });
if (!plan.tasks.some((candidate) => candidate.id === selected.next)) plan.tasks.push({ id: selected.next, phase: "P44", title: "authorize_next_implementation_wave", kind: "enabling", owner: "PROGRAM", dependsOn: [task], parityId: null, implementationClass: "SOURCE_BACKED", parallelGroup: "p44-000", gate: "G1", card: `docs/tasks/${selected.next}.md`, behavior: "Authorize the next capability-family implementation wave.", outputs: ["implementation-report", "manifest", "status"], acceptance: ["6900 inventory remains immutable", "capability families are deduplicated before implementation", "real Blender source or WebEngine Main path is wired", "verification and completion overlay remain deferred"], status: "in_progress", ready: true, queueMutationAllowed: true });
fs.writeFileSync(abs(planPath), `${JSON.stringify(plan, null, 2)}\n`);
execFileSync(process.execPath, [abs("tools/web/generate-v2-task-index.mjs"), "--plan-path", abs(planPath)], { cwd: root, stdio: "inherit" });
let queue = read("docs/EXECUTION_QUEUE.md");
queue = queue.replace(/\| 当前任务 \| `[^`]+` \|/u, `| 当前任务 | \`${selected.next}\` |`).replace(/\| parent manifest \| `[^`]+` \|/u, `| parent manifest | \`tests/golden/${task}/manifest.json\` |`).replace(/\| 任务卡 \| \[[^\]]+\]\([^\)]+\) \|/u, `| 任务卡 | [\`tasks/${selected.next}.md\`](tasks/${selected.next}.md) |`);
fs.writeFileSync(abs("docs/EXECUTION_QUEUE.md"), queue);
execFileSync(process.execPath, [abs("tools/web/check-task-context.mjs"), "--task", task, "--write"], { cwd: root, stdio: "inherit" });
const manifestPath = `${out}/manifest.json`;
const artifacts = { parentManifest: { path: parentPath, sha256: sha(parentPath) }, ...Object.fromEntries(selected.files.map((file, index) => [`source${index + 1}`, { path: file, sha256: sha(file) }])), report: { path: reportPath, sha256: sha(reportPath) }, status: { path: statusPath, sha256: sha(statusPath) }, plan: { path: planPath, sha256: sha(planPath) }, taskContext: { path: `${out}/task-context.json`, sha256: sha(`${out}/task-context.json`) } };
fs.writeFileSync(abs(manifestPath), `${JSON.stringify({ schemaVersion: 1, task, parentTask: selected.parent, operation: "IMPLEMENT_CAPABILITY_FAMILY_SLICE", status: "done", enablingTask: false, parityStateChange: false, runtime: "SOURCE_BACKED_CAPABILITY_FAMILY_IMPLEMENTATION", artifacts, assertions: { capabilityFamily: selected.family, sourceBacked: true, batchCount: 27, pendingRows: 6609, verificationDeferred: true, completionOverlayWritten: false, inventoryTotal: 6900, effectiveCompleted: 290, effectivePending: 6609, historicalReproduction: false }, nextTask: selected.next }, null, 2)}\n`);
execFileSync(process.execPath, [abs("tools/web/check-task-context.mjs"), "--task", selected.next, "--write"], { cwd: root, stdio: "inherit" });
const tick = String.fromCharCode(96);
const nextContext = configs[selected.next]?.next ?? "NONE";
let next = read("nextTask.md");
next = next.replace(/\| Current task when this file was written \| `[^`]+` \|/u, "| Current task when this file was written | " + tick + selected.next + tick + " |").replace(/\| Current task state \| `[^`]+` \|/u, "| Current task state | " + tick + "in_progress" + tick + " |").replace(/\| Parent manifest \| `[^`]+` \|/u, "| Parent manifest | " + tick + "tests/golden/" + task + "/manifest.json" + tick + " |").replace(/\| Current task card \| `[^`]+` \|/u, "| Current task card | " + tick + "docs/tasks/" + selected.next + ".md" + tick + " |").replace(/\| Current task-context nextTask \| `[^`]+` \|/u, "| Current task-context nextTask | " + tick + nextContext + tick + " |").replace(/\| Focused command \| `[^`]+` \|/u, "| Focused command | " + tick + "node tools/web/generate-wbv2-capability-family-slice.mjs --task " + selected.next + " --write" + tick + " |");
fs.writeFileSync(abs("nextTask.md"), next);
console.log(`wbv2-capability-family-slice-written task=${task} family=${selected.family} next=${selected.next} verification=DEFERRED`);

View File

@@ -20,6 +20,7 @@ import type { RenderCapabilityRequest } from "../../../protocol/render-capabilit
import { compositorCommands } from "../../../protocol/compositor-commands";
import { geometryNodeCommands } from "../../../protocol/geometry-node-commands";
import { physicsCommands } from "../../../protocol/physics-commands";
import { WEB_ENGINE_COMMAND_CAPABILITIES } from "../../../protocol/web-engine-capabilities";
import type { NonMeshGeometryChunk } from "../../../protocol/nonmesh-binary";
import type { SimplifyAttributePolicy, SimplifyDelimit, SimplifyMode, SimplifyProfile } from "../../../protocol/simplify";
import { StorageClient } from "../storage/StorageClient";
@@ -922,6 +923,7 @@ function Properties({ snapshot, selectedFaceIndices, selectedVertexIndices, grea
<div className="property-section"><h3>Transform</h3><label>位置 <output>0.000, 0.000, 0.000</output></label><label>旋转 <output>0°, 0°, 0°</output></label><label>缩放 <output>1.000, 1.000, 1.000</output></label></div>
{activeNode ? <div className="property-section"><h3>Object & Hierarchy</h3><label>名称 <input aria-label="对象名称" value={renameValue} onChange={(event) => setRenameValue(event.target.value)} /></label><div className="property-actions"><button type="button" onClick={() => renameValue && onCommand({ type: "renameId", id: activeNode.id, name: renameValue })}>重命名</button><button type="button" onClick={() => onCommand({ type: "applyObjectTransform", objectId: activeNode.id })}>应用变换</button><button type="button" onClick={() => onCommand({ type: "setObjectOrigin", objectId: activeNode.id, mode: "GEOMETRY" })}>原点到几何体</button></div><label>Collection <select aria-label="移动到 Collection" value="" onChange={(event) => event.target.value && onCommand({ type: "moveObjectToCollection", objectId: activeNode.id, collectionId: event.target.value })}><option value="">选择...</option>{snapshot?.collections.map((collection) => <option key={collection.id} value={collection.id}>{collection.name}</option>)}</select></label></div> : null}
{snapshot ? <div className="property-section" data-testid="scene-context-workbench"><h3>Scene Context</h3><output data-testid="scene-context-counts">Scenes {snapshot.scenes.length} · Collections {snapshot.collections.length} · Armatures {snapshot.armatures?.length ?? 0} · Libraries {snapshot.libraries?.length ?? 0}</output>{snapshot.scenes.map((scene) => <output key={scene.id} data-resource-id={scene.id}>Scene: {scene.name}{scene.renderEngine ? ` · ${scene.renderEngine}` : ""}</output>)}{snapshot.collections.slice(0, 32).map((collection) => <output key={collection.id} data-resource-id={collection.id}>Collection: {collection.name} · {collection.objectIds.length} objects · {collection.childCollectionIds.length} children</output>)}{snapshot.armatures?.slice(0, 16).map((armature) => <output key={armature.id} data-resource-id={armature.id}>Armature: {armature.name} · {armature.bones.length} bones</output>)}{snapshot.libraries?.slice(0, 16).map((library) => <output key={library.id} data-resource-id={library.id}>Library: {library.name} · {library.status}</output>)}</div> : null}
{snapshot ? <div className="property-section" data-testid="capability-family-workbench"><h3>Capability Families</h3><output data-testid="capability-family-command-count">{Object.keys(WEB_ENGINE_COMMAND_CAPABILITIES).length} typed Main commands</output>{[...new Set(Object.values(WEB_ENGINE_COMMAND_CAPABILITIES).map((capability) => capability.family))].sort().map((family) => <output key={family} data-capability-family={family}>{family}</output>)}</div> : null}
{snapshot && (snapshot.releaseCandidateStatus || snapshot.scriptingPolicyStatus || snapshot.renderRoutingStatus || snapshot.serverJobBindingStatus || snapshot.performanceFaultMatrixStatus || snapshot.editorWorkflowStatus) ? <div className="property-section" data-testid="release-status-workbench"><h3>Runtime Status</h3><output data-testid="runtime-status-summary">Scripting {snapshot.scriptingPolicyStatus ?? "UNKNOWN"} · Render {snapshot.renderRoutingStatus ?? "UNKNOWN"} · Jobs {snapshot.serverJobBindingStatus ?? "UNKNOWN"}</output><output>Editor workflow {snapshot.editorWorkflowStatus ?? "UNKNOWN"} · Performance faults {snapshot.performanceFaultMatrixStatus ?? "UNKNOWN"}</output><output>Release candidate {snapshot.releaseCandidateStatus ?? "UNKNOWN"}</output></div> : null}
{activeNode?.dataId?.startsWith("mesh:") ? <div className="property-section" data-testid="geometry-node-workbench"><h3>Geometry Nodes</h3><output data-testid="geometry-node-graph-count">{snapshot?.geometryNodeGraphs?.length ?? 0} graphs</output>{activeGeometryGraph ? <><output data-testid="geometry-node-active-graph">{activeGeometryGraph.name}</output><output>{activeGeometryGraph.nodes.length} nodes / {activeGeometryGraph.links.length} links</output><button type="button" onClick={() => onCommand(geometryNodeCommands.setGraph(activeNode.dataId!, activeGeometryGraph))}>提交当前节点图</button></> : <output>当前文件没有 Geometry Node 图</output>}</div> : null}
{snapshot?.physicsSimulation ? <div className="property-section" data-testid="physics-workbench"><h3>Physics</h3><output data-testid="physics-system-count">{snapshot.physicsSimulation.systems.length} systems</output><output>{[...new Set(snapshot.physicsSimulation.systems.map((system) => system.family))].join(", ") || "No systems"}</output><button type="button" disabled={!activeNode} onClick={() => onCommand(physicsCommands.setManifest(snapshot.physicsSimulation!))}>提交物理清单</button></div> : null}