feat(web): drive 6900 work by capability families
This commit is contained in:
@@ -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` |
|
||||
|
||||
7
docs/status/WBV2-P43-000.md
Normal file
7
docs/status/WBV2-P43-000.md
Normal 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`
|
||||
8
docs/status/WBV2-P43-001.md
Normal file
8
docs/status/WBV2-P43-001.md
Normal 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`
|
||||
8
docs/status/WBV2-P43-002.md
Normal file
8
docs/status/WBV2-P43-002.md
Normal 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`
|
||||
8
docs/status/WBV2-P43-003.md
Normal file
8
docs/status/WBV2-P43-003.md
Normal 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`
|
||||
@@ -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.
|
||||
|
||||
39
docs/tasks/WBV2-P43-001.md
Normal file
39
docs/tasks/WBV2-P43-001.md
Normal 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.
|
||||
39
docs/tasks/WBV2-P43-002.md
Normal file
39
docs/tasks/WBV2-P43-002.md
Normal 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.
|
||||
39
docs/tasks/WBV2-P43-003.md
Normal file
39
docs/tasks/WBV2-P43-003.md
Normal 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.
|
||||
36
docs/tasks/WBV2-P44-000.md
Normal file
36
docs/tasks/WBV2-P44-000.md
Normal 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.
|
||||
26
nextTask.md
26
nextTask.md
@@ -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 --`.
|
||||
|
||||
38
tests/golden/WBV2-P43-000/capability-family-root-report.json
Normal file
38
tests/golden/WBV2-P43-000/capability-family-root-report.json
Normal 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"
|
||||
}
|
||||
152
tests/golden/WBV2-P43-000/capability-family-task-plan.json
Normal file
152
tests/golden/WBV2-P43-000/capability-family-task-plan.json
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
||||
39
tests/golden/WBV2-P43-000/manifest.json
Normal file
39
tests/golden/WBV2-P43-000/manifest.json
Normal 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"
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
152
tests/golden/WBV2-P43-001/capability-family-task-plan.json
Normal file
152
tests/golden/WBV2-P43-001/capability-family-task-plan.json
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
||||
300
tests/golden/WBV2-P43-001/capability-implementation-index.json
Normal file
300
tests/golden/WBV2-P43-001/capability-implementation-index.json
Normal 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
|
||||
}
|
||||
}
|
||||
38
tests/golden/WBV2-P43-001/implementation-report.json
Normal file
38
tests/golden/WBV2-P43-001/implementation-report.json
Normal 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"
|
||||
}
|
||||
61
tests/golden/WBV2-P43-001/manifest.json
Normal file
61
tests/golden/WBV2-P43-001/manifest.json
Normal 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"
|
||||
}
|
||||
172
tests/golden/WBV2-P43-001/task-context.json
Normal file
172
tests/golden/WBV2-P43-001/task-context.json
Normal 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
|
||||
}
|
||||
}
|
||||
152
tests/golden/WBV2-P43-002/capability-family-task-plan.json
Normal file
152
tests/golden/WBV2-P43-002/capability-family-task-plan.json
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
||||
33
tests/golden/WBV2-P43-002/implementation-report.json
Normal file
33
tests/golden/WBV2-P43-002/implementation-report.json
Normal 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"
|
||||
}
|
||||
53
tests/golden/WBV2-P43-002/manifest.json
Normal file
53
tests/golden/WBV2-P43-002/manifest.json
Normal 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"
|
||||
}
|
||||
173
tests/golden/WBV2-P43-002/task-context.json
Normal file
173
tests/golden/WBV2-P43-002/task-context.json
Normal 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
|
||||
}
|
||||
}
|
||||
182
tests/golden/WBV2-P43-003/capability-family-task-plan.json
Normal file
182
tests/golden/WBV2-P43-003/capability-family-task-plan.json
Normal 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
|
||||
}
|
||||
]
|
||||
}
|
||||
33
tests/golden/WBV2-P43-003/implementation-report.json
Normal file
33
tests/golden/WBV2-P43-003/implementation-report.json
Normal 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"
|
||||
}
|
||||
53
tests/golden/WBV2-P43-003/manifest.json
Normal file
53
tests/golden/WBV2-P43-003/manifest.json
Normal 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"
|
||||
}
|
||||
173
tests/golden/WBV2-P43-003/task-context.json
Normal file
173
tests/golden/WBV2-P43-003/task-context.json
Normal 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
|
||||
}
|
||||
}
|
||||
163
tests/golden/WBV2-P44-000/task-context.json
Normal file
163
tests/golden/WBV2-P44-000/task-context.json
Normal 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
|
||||
}
|
||||
}
|
||||
@@ -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"]}
|
||||
|
||||
@@ -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}}}
|
||||
|
||||
70
tools/web/build-wbv2-capability-implementation-index.mjs
Normal file
70
tools/web/build-wbv2-capability-implementation-index.mjs
Normal 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}`);
|
||||
48
tools/web/generate-wbv2-capability-family-root.mjs
Normal file
48
tools/web/generate-wbv2-capability-family-root.mjs
Normal 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");
|
||||
55
tools/web/generate-wbv2-capability-family-slice.mjs
Normal file
55
tools/web/generate-wbv2-capability-family-slice.mjs
Normal 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`);
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user