feat(web): drive 6900 work by capability families
This commit is contained in:
@@ -13,9 +13,9 @@
|
|||||||
| 字段 | 值 |
|
| 字段 | 值 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| 里程碑 | WBV2 capability workflow |
|
| 里程碑 | WBV2 capability workflow |
|
||||||
| 当前任务 | `WBV2-P43-000` |
|
| 当前任务 | `WBV2-P44-000` |
|
||||||
| parent manifest | `tests/golden/WBV2-P42-003/manifest.json` |
|
| parent manifest | `tests/golden/WBV2-P43-003/manifest.json` |
|
||||||
| 任务卡 | [`tasks/WBV2-P43-000.md`](tasks/WBV2-P43-000.md) |
|
| 任务卡 | [`tasks/WBV2-P44-000.md`](tasks/WBV2-P44-000.md) |
|
||||||
| 专项验收 | `node tools/web/check-execution-control-plane.mjs` |
|
| 专项验收 | `node tools/web/check-execution-control-plane.mjs` |
|
||||||
| legacy coverage checkpoint | `M16-GAP-00282` |
|
| legacy coverage checkpoint | `M16-GAP-00282` |
|
||||||
| legacy coverage parent | `tests/golden/M16-GAP-00281/manifest.json` |
|
| 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
|
- task: WBV2-P43-000
|
||||||
- parent: WBV2-P42-003
|
- parent: WBV2-P42-003
|
||||||
- status: in_progress
|
- status: done
|
||||||
- gap: workflow:authorize_continuous_wave
|
- gap: workflow:authorize_capability_family_implementation
|
||||||
- ownerFamily: PROGRAM
|
- ownerFamily: PROGRAM
|
||||||
- targetImplementationClass: SOURCE_BACKED
|
- 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`
|
- Blender source authority: `blender-5.2.0/source/blender`
|
||||||
- Implementation entrypoint: `node tools/web/generate-wbv2-continuous-root.mjs`
|
- 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
|
- 6900 inventory and historical provenance remain read-only
|
||||||
- original inventory and provenance remain unchanged
|
- source hash, behavior hash and dedupe key are reused before any work
|
||||||
- Chromium parity receipts and completion overlays remain deferred
|
- 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`
|
- `node tools/web/check-task-context.mjs --task WBV2-P43-000 --write`
|
||||||
|
|
||||||
## 失败边界
|
## 失败边界
|
||||||
|
|
||||||
- malformed, unsupported and hash-drift inputs fail closed
|
- missing source, unsupported capability, hash drift or ambiguous mapping remains in_progress/blocked
|
||||||
- implementation evidence never changes historical provenance
|
- representative implementation never becomes a full-family completion claim
|
||||||
|
|
||||||
## 交付与回滚
|
## 交付与回滚
|
||||||
|
|
||||||
- Reports: `tests/golden/WBV2-P43-000/`
|
- Reports: `tests/golden/WBV2-P43-000/`
|
||||||
- Status: `docs/status/WBV2-P43-000.md`
|
- Status: `docs/status/WBV2-P43-000.md`
|
||||||
- Manifest: `tests/golden/WBV2-P43-000/manifest.json`
|
- 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
|
constraints only; they cannot override or replace behavior present in the
|
||||||
Blender source.
|
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
|
## Copyable Resume Prompt
|
||||||
|
|
||||||
Use the following prompt when continuous execution is needed. It is the
|
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 是否保持不变、提交/推送状态和剩余真实阻塞。
|
11. 每轮结束报告实现切片、当前任务、`nextTask`、最小检查退出码、原始 inventory、effective inventory 是否保持不变、提交/推送状态和剩余真实阻塞。
|
||||||
12. CONTINUOUS_LOOP_REQUIRED:成功交接后立即开始下一轮;不得在成功提交、推送或生成新 manifest 后等待用户确认、只写计划或只汇报状态。每轮必须重新运行 `print-task-context` 和 `check-task-context`,使用新 parent manifest 的 `nextTask`,不沿用上一轮上下文。
|
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`,不得重试未知结果。
|
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
|
## 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
|
is itself an executable enabling task: run its declared root generator, then
|
||||||
continue from the generated child task in the same continuous run.
|
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:
|
For process-level unattended execution, run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -249,12 +266,12 @@ Recorded: 2026-08-29 Asia/Shanghai
|
|||||||
|
|
||||||
| Field | Value |
|
| 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` |
|
| Current task state | `in_progress` |
|
||||||
| Parent manifest | `tests/golden/WBV2-P42-003/manifest.json` |
|
| Parent manifest | `tests/golden/WBV2-P43-003/manifest.json` |
|
||||||
| Current task card | `docs/tasks/WBV2-P43-000.md` |
|
| Current task card | `docs/tasks/WBV2-P44-000.md` |
|
||||||
| Current task-context nextTask | `NONE` |
|
| 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,
|
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
|
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.
|
- 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.
|
- `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
|
- Do not read full historical plans, all status logs, or the full gap plan by
|
||||||
default.
|
default.
|
||||||
- Keep unrelated user changes. Never use `git reset --hard` or `git checkout --`.
|
- 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,
|
"schemaVersion": 1,
|
||||||
"task": "WBV2-P43-000",
|
"task": "WBV2-P43-000",
|
||||||
"parentTask": "WBV2-P42-003",
|
"parentTask": "WBV2-P42-003",
|
||||||
"status": "in_progress",
|
"status": "done",
|
||||||
"goal": "Authorize the next source-backed implementation wave.",
|
"goal": "Authorize source-backed implementation indexing across the immutable 6900-entry inventory.",
|
||||||
"scope": {
|
"scope": {
|
||||||
"gap": "workflow:authorize_continuous_wave",
|
"gap": "workflow:authorize_capability_family_implementation",
|
||||||
"ownerFamily": "PROGRAM",
|
"ownerFamily": "PROGRAM",
|
||||||
"implementationClass": "SOURCE_BACKED"
|
"implementationClass": "SOURCE_BACKED"
|
||||||
},
|
},
|
||||||
@@ -18,18 +18,28 @@
|
|||||||
"limits": {
|
"limits": {
|
||||||
"maxFiles": 12,
|
"maxFiles": 12,
|
||||||
"evidenceBytes": 8192,
|
"evidenceBytes": 8192,
|
||||||
"contextRemainingBytes": 3964,
|
"contextRemainingBytes": 3572,
|
||||||
"contextRemainingTokens": 989
|
"contextRemainingTokens": 891
|
||||||
},
|
},
|
||||||
"source": {
|
"source": {
|
||||||
"bytes": 5940,
|
"bytes": 6332,
|
||||||
"tokens": 1487
|
"tokens": 1585
|
||||||
},
|
},
|
||||||
"selected": [],
|
"selected": [],
|
||||||
"excluded": [
|
"excluded": [
|
||||||
{
|
{
|
||||||
"path": "web/protocol/web-engine.ts",
|
"path": "blender-5.2.0/source/blender",
|
||||||
"bytes": 15951,
|
"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"
|
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -55,12 +65,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"exitCriteria": [
|
"exitCriteria": [
|
||||||
"real source or WebEngine Main path is wired",
|
"6900 inventory remains immutable",
|
||||||
"unsupported input fails closed",
|
"capability families are deduplicated before implementation",
|
||||||
"implementation smoke is reproducible",
|
"real Blender source or WebEngine Main path is wired",
|
||||||
"verification remains deferred"
|
"verification and completion overlay remain deferred"
|
||||||
],
|
],
|
||||||
"nextTask": null,
|
"nextTask": "WBV2-P43-001",
|
||||||
"sourceDocuments": {
|
"sourceDocuments": {
|
||||||
"queue": "docs/EXECUTION_QUEUE.md",
|
"queue": "docs/EXECUTION_QUEUE.md",
|
||||||
"taskCard": "docs/tasks/WBV2-P43-000.md",
|
"taskCard": "docs/tasks/WBV2-P43-000.md",
|
||||||
@@ -112,15 +122,15 @@
|
|||||||
},
|
},
|
||||||
"budgets": {
|
"budgets": {
|
||||||
"queueBytes": 4096,
|
"queueBytes": 4096,
|
||||||
"taskBytes": 1058,
|
"taskBytes": 1450,
|
||||||
"parentManifestBytes": 24576,
|
"parentManifestBytes": 24576,
|
||||||
"parentStatusBytes": 6144,
|
"parentStatusBytes": 6144,
|
||||||
"evidenceFiles": 12,
|
"evidenceFiles": 12,
|
||||||
"evidenceBytes": 8192,
|
"evidenceBytes": 8192,
|
||||||
"contextTokens": 3500,
|
"contextTokens": 3500,
|
||||||
"contextEnvelopeTokens": 1024,
|
"contextEnvelopeTokens": 1024,
|
||||||
"taskLines": 37,
|
"taskLines": 40,
|
||||||
"taskTokens": 265
|
"taskTokens": 363
|
||||||
},
|
},
|
||||||
"size": {
|
"size": {
|
||||||
"documents": [
|
"documents": [
|
||||||
@@ -132,9 +142,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "docs/tasks/WBV2-P43-000.md",
|
"path": "docs/tasks/WBV2-P43-000.md",
|
||||||
"bytes": 1058,
|
"bytes": 1450,
|
||||||
"lines": 37,
|
"lines": 40,
|
||||||
"tokens": 265
|
"tokens": 363
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "tests/golden/WBV2-P42-003/manifest.json",
|
"path": "tests/golden/WBV2-P42-003/manifest.json",
|
||||||
@@ -149,14 +159,14 @@
|
|||||||
"tokens": 66
|
"tokens": 66
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"sourceTokens": 1487,
|
"sourceTokens": 1585,
|
||||||
"evidenceFiles": 0,
|
"evidenceFiles": 0,
|
||||||
"evidenceBytes": 0,
|
"evidenceBytes": 0,
|
||||||
"evidenceTokens": 0,
|
"evidenceTokens": 0,
|
||||||
"totalTokens": 1487,
|
"totalTokens": 1585,
|
||||||
"reservedEnvelopeTokens": 1024,
|
"reservedEnvelopeTokens": 1024,
|
||||||
"estimatedContextTokens": 2511,
|
"estimatedContextTokens": 2609,
|
||||||
"serializedContextTokens": 598,
|
"serializedContextTokens": 626,
|
||||||
"withinBudget": true
|
"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-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-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-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-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-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-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-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-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-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 { compositorCommands } from "../../../protocol/compositor-commands";
|
||||||
import { geometryNodeCommands } from "../../../protocol/geometry-node-commands";
|
import { geometryNodeCommands } from "../../../protocol/geometry-node-commands";
|
||||||
import { physicsCommands } from "../../../protocol/physics-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 { NonMeshGeometryChunk } from "../../../protocol/nonmesh-binary";
|
||||||
import type { SimplifyAttributePolicy, SimplifyDelimit, SimplifyMode, SimplifyProfile } from "../../../protocol/simplify";
|
import type { SimplifyAttributePolicy, SimplifyDelimit, SimplifyMode, SimplifyProfile } from "../../../protocol/simplify";
|
||||||
import { StorageClient } from "../storage/StorageClient";
|
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>
|
<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}
|
{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="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}
|
{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}
|
{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}
|
{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