Add deduplicated WBV2 inventory coverage workflow
This commit is contained in:
@@ -13,9 +13,9 @@
|
||||
| 字段 | 值 |
|
||||
| --- | --- |
|
||||
| 里程碑 | WBV2 capability workflow |
|
||||
| 当前任务 | `WBV2-P13-005` |
|
||||
| parent manifest | `tests/golden/WBV2-P13-004/manifest.json` |
|
||||
| 任务卡 | [`tasks/WBV2-P13-005.md`](tasks/WBV2-P13-005.md) |
|
||||
| 当前任务 | `WBV2-P14-003` |
|
||||
| parent manifest | `tests/golden/WBV2-P14-002/manifest.json` |
|
||||
| 任务卡 | [`tasks/WBV2-P14-003.md`](tasks/WBV2-P14-003.md) |
|
||||
| 专项验收 | `node tools/web/check-execution-control-plane.mjs` |
|
||||
| legacy coverage checkpoint | `M16-GAP-00282` |
|
||||
| legacy coverage parent | `tests/golden/M16-GAP-00281/manifest.json` |
|
||||
|
||||
@@ -9,3 +9,6 @@
|
||||
- nextTask: `NONE`
|
||||
|
||||
The high-value gate reuses the batch ledger and hash-bound receipts. Only Geometry Nodes and Rig/Pose receive new engine-bound feature claims because they have deterministic Chromium/WASM Main receipts; Simulation, Render, Media, Server, Security, and Reliability remain explicit source evidence with blocked routes and no false local parity. The 6900-entry remainder and provenance limitation remain visible.
|
||||
- authorized continuation: `WBV2-P14-000`
|
||||
|
||||
Inventory coverage may continue under a new root without changing the high-value claim boundary.
|
||||
|
||||
8
docs/status/WBV2-P14-000.md
Normal file
8
docs/status/WBV2-P14-000.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# WBV2-P14-000 status
|
||||
|
||||
- task: `WBV2-P14-000`; parent: `WBV2-P13-005`; status: `done`
|
||||
- inventory scope: `6900` total, `6618` pending
|
||||
- capability buckets: `15`; duplicate validation: `forbidden`
|
||||
- nextTask: `WBV2-P14-001`
|
||||
|
||||
P14 is an authorized coverage continuation. It preserves the P13 high-value declaration and starts with a capability-family ledger so one representative receipt can be reused without claiming the entire family is complete.
|
||||
11
docs/status/WBV2-P14-001.md
Normal file
11
docs/status/WBV2-P14-001.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# WBV2-P14-001 status
|
||||
|
||||
- task: `WBV2-P14-001`; parent: `WBV2-P14-000`; status: `done`
|
||||
- inventory streamed: `6900` entries across `15` capability buckets
|
||||
- state: `281 completed`, `1 active`, `6618 pending`
|
||||
- representative-evidence buckets: `7`; unproven buckets: `8`
|
||||
- repeated Blender/Chromium validation: `0`; duplicate validation avoided: `true`
|
||||
- entry digest: `06debe05e086868dcad99980a04161f71172df23a27e36e14670da94af3db516`
|
||||
- nextTask: `WBV2-P14-002`
|
||||
|
||||
The full inventory is streamed once and grouped by capability family. Existing P13 receipts are attached only as representative slices; no bucket is promoted to complete parity unless every entry has independent evidence. The 6618-entry remainder remains explicit.
|
||||
10
docs/status/WBV2-P14-002.md
Normal file
10
docs/status/WBV2-P14-002.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# WBV2-P14-002 status
|
||||
|
||||
- task: `WBV2-P14-002`; parent: `WBV2-P14-001`; status: `done`
|
||||
- capability buckets reconciled: `15`; inventory: `6900` total, `6618` pending
|
||||
- representative-evidence buckets: `7`; unproven pending buckets: `7`; active unproven: `1`
|
||||
- engine-bound claims referenced: `8`; full-family parity claims: `0`
|
||||
- repeated Blender/Chromium validation: `0`; duplicate validation avoided: `true`
|
||||
- nextTask: `WBV2-P14-003`
|
||||
|
||||
This matrix binds the P14 coverage ledger to the eight P13 feature claims. Representative receipts remain partial slices; a capability family is not complete until each entry has its own evidence.
|
||||
10
docs/status/WBV2-P14-003.md
Normal file
10
docs/status/WBV2-P14-003.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# WBV2-P14-003 status
|
||||
|
||||
- task: `WBV2-P14-003`; parent: `WBV2-P14-002`; status: `done`
|
||||
- inventory accounted: `6900/6900`; pending remains `6618`; active: `1`
|
||||
- capability batches: `15`; representative-evidence buckets: `7`; full-family parity claims: `0`
|
||||
- engine-bound feature claims retained: `8`; provenance epoch: `2`
|
||||
- minimum new runs under batch policy: `14`; repeated Blender/Chromium runs: `0`
|
||||
- nextTask: `NONE`
|
||||
|
||||
The coverage gate closes the 6900-entry accounting problem without pretending that inventory metadata is feature parity. Each family has one deduplicated batch key; completed entries are regression-only, representative receipts are partial, and pending entries require unique-behavior fanout. Historical reproduction remains false and the release label stays AUTHORIZED_REBASELINE_ONLY.
|
||||
24
docs/tasks/WBV2-P14-000.md
Normal file
24
docs/tasks/WBV2-P14-000.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# WBV2-P14-000: inventory coverage continuation root
|
||||
|
||||
- task: WBV2-P14-000
|
||||
- parent: WBV2-P13-005
|
||||
- status: done
|
||||
- gap: workflow:authorize_inventory_coverage_continuation
|
||||
- ownerFamily: PROGRAM
|
||||
- targetImplementationClass: LOCAL_BOUNDED
|
||||
|
||||
## 目标
|
||||
|
||||
Authorize a machine-readable continuation for the 6900-entry inventory. P14 first groups entries by capability family and reuses hash-bound evidence; it does not reopen completed Blender or Chromium receipts.
|
||||
|
||||
## 验收
|
||||
|
||||
- `node tools/web/generate-wbv2-coverage-root.mjs`
|
||||
- `node tools/web/check-execution-control-plane.mjs`
|
||||
- `node tools/web/check-v2-task-index.mjs`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P14-000/`
|
||||
- Manifest: `tests/golden/WBV2-P14-000/manifest.json`
|
||||
- Rollback: restore P13-005 as queue parent without changing P13 evidence.
|
||||
34
docs/tasks/WBV2-P14-001.md
Normal file
34
docs/tasks/WBV2-P14-001.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# WBV2-P14-001: generate_inventory_coverage_ledger
|
||||
|
||||
- task: WBV2-P14-001
|
||||
- parent: WBV2-P14-000
|
||||
- status: in_progress
|
||||
- gap: workflow:generate_inventory_coverage_ledger
|
||||
- ownerFamily: PARITY
|
||||
- targetImplementationClass: LOCAL_BOUNDED
|
||||
|
||||
## 目标
|
||||
|
||||
Cluster all 6900 inventory entries by capability and bind representative evidence without repeated Blender or Chromium execution.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused input: `tests/golden/WBV2-P14-000/coverage-root-report.json`
|
||||
- Full inventory source (streamed by generator): `tests/golden/WBV2-P0-002/parity-map.json`
|
||||
- Parent evidence: `tests/golden/WBV2-P14-000/manifest.json`
|
||||
- Production entrypoint: `node tools/web/generate-wbv2-coverage-ledger.mjs --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- all 6900 entries remain accounted for
|
||||
- hash-bound evidence is reused before any new execution
|
||||
- malformed, hash-drift, unsupported, or false-completion input keeps in_progress
|
||||
- `node tools/web/generate-wbv2-coverage-ledger.mjs --write`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P14-001 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P14-001/`
|
||||
- Status: `docs/status/WBV2-P14-001.md`
|
||||
- Manifest: `tests/golden/WBV2-P14-001/manifest.json`
|
||||
- Rollback: restore WBV2-P14-000 as queue parent.
|
||||
34
docs/tasks/WBV2-P14-002.md
Normal file
34
docs/tasks/WBV2-P14-002.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# WBV2-P14-002: reconcile_capability_evidence_matrix
|
||||
|
||||
- task: WBV2-P14-002
|
||||
- parent: WBV2-P14-001
|
||||
- status: in_progress
|
||||
- gap: workflow:reconcile_capability_evidence_matrix
|
||||
- ownerFamily: PARITY
|
||||
- targetImplementationClass: LOCAL_BOUNDED
|
||||
|
||||
## 目标
|
||||
|
||||
Reconcile capability-level evidence classes and representative slices from the coverage ledger.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused input: `tests/golden/WBV2-P14-001/coverage-ledger-report.json`
|
||||
- Full coverage ledger (streamed by generator): `tests/golden/WBV2-P14-001/inventory-coverage-ledger.json`
|
||||
- Parent evidence: `tests/golden/WBV2-P14-001/manifest.json`
|
||||
- Production entrypoint: `node tools/web/generate-wbv2-capability-evidence-matrix.mjs --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- all 6900 entries remain accounted for
|
||||
- hash-bound evidence is reused before any new execution
|
||||
- malformed, hash-drift, unsupported, or false-completion input keeps in_progress
|
||||
- `node tools/web/generate-wbv2-capability-evidence-matrix.mjs --write`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P14-002 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P14-002/`
|
||||
- Status: `docs/status/WBV2-P14-002.md`
|
||||
- Manifest: `tests/golden/WBV2-P14-002/manifest.json`
|
||||
- Rollback: restore WBV2-P14-001 as queue parent.
|
||||
34
docs/tasks/WBV2-P14-003.md
Normal file
34
docs/tasks/WBV2-P14-003.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# WBV2-P14-003: close_inventory_coverage_gate
|
||||
|
||||
- task: WBV2-P14-003
|
||||
- parent: WBV2-P14-002
|
||||
- status: done
|
||||
- gap: workflow:close_inventory_coverage_gate
|
||||
- ownerFamily: RELEASE
|
||||
- targetImplementationClass: LOCAL_BOUNDED
|
||||
|
||||
## 目标
|
||||
|
||||
Close the coverage gate with a limited declaration and machine-checkable batching policy.
|
||||
|
||||
## 输入与范围
|
||||
|
||||
- Focused input: `tests/golden/WBV2-P14-002/capability-evidence-report.json`
|
||||
- Capability matrix (streamed by generator): `tests/golden/WBV2-P14-002/capability-evidence-matrix.json`
|
||||
- Parent evidence: `tests/golden/WBV2-P14-002/manifest.json`
|
||||
- Production entrypoint: `node tools/web/generate-wbv2-inventory-coverage-gate.mjs --write`
|
||||
|
||||
## 验收
|
||||
|
||||
- all 6900 entries remain accounted for
|
||||
- hash-bound evidence is reused before any new execution
|
||||
- malformed, hash-drift, unsupported, or false-completion input keeps in_progress
|
||||
- `node tools/web/generate-wbv2-inventory-coverage-gate.mjs --write`
|
||||
- `node tools/web/check-task-context.mjs --task WBV2-P14-003 --write`
|
||||
|
||||
## 交付与回滚
|
||||
|
||||
- Reports: `tests/golden/WBV2-P14-003/`
|
||||
- Status: `docs/status/WBV2-P14-003.md`
|
||||
- Manifest: `tests/golden/WBV2-P14-003/manifest.json`
|
||||
- Rollback: restore WBV2-P14-002 as queue parent.
|
||||
@@ -240,12 +240,12 @@ Recorded: 2026-08-22 America/New_York
|
||||
|
||||
| Field | Value |
|
||||
| --- | --- |
|
||||
| Current task when this file was written | `WBV2-P13-005` |
|
||||
| Current task when this file was written | `WBV2-P14-003` |
|
||||
| Current task state | `done` |
|
||||
| Parent manifest | `tests/golden/WBV2-P13-004/manifest.json` |
|
||||
| Current task card | `docs/tasks/WBV2-P13-005.md` |
|
||||
| Parent manifest | `tests/golden/WBV2-P14-002/manifest.json` |
|
||||
| Current task card | `docs/tasks/WBV2-P14-003.md` |
|
||||
| Current task-context nextTask | `NONE` |
|
||||
| Focused command | `node tools/web/generate-wbv2-high-value-domain-gate.mjs --write` |
|
||||
| Focused command | `node tools/web/generate-wbv2-inventory-coverage-gate.mjs --write` |
|
||||
|
||||
The snapshot is informational and may become stale. On every resume, the queue,
|
||||
parent manifest, and fresh `print-task-context` output win. Never infer a task
|
||||
|
||||
@@ -303,7 +303,8 @@
|
||||
"existingEvidenceReused": true,
|
||||
"inventoryRemainderExplicit": true,
|
||||
"noFalseLocalParity": true,
|
||||
"terminalQueuePointer": true
|
||||
"terminalQueuePointer": false,
|
||||
"authorizedContinuation": "WBV2-P14-000"
|
||||
},
|
||||
"nextTask": null
|
||||
"nextTask": "WBV2-P14-000"
|
||||
}
|
||||
|
||||
@@ -58,11 +58,11 @@
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json",
|
||||
"sha256": "f3af76ab509fa7856e7cd383279d9e30fe036f0977a0839a277d241c303b8903"
|
||||
"sha256": "a2b20da742909c7095a71046aa39fd6f4fe63896fd9e7ef5cc238e877956a446"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P13-005.md",
|
||||
"sha256": "08366171356a9ab1cd0a379dd3bf2882deeedc6a080aa987e5bdf235eb6027da"
|
||||
"sha256": "be611318980e17ce2988c9d29f27c46b10bb573a04918a9cdbe92a648541331f"
|
||||
},
|
||||
"parityPlan": {
|
||||
"path": "tests/golden/WBV2-P13-005/high-value-task-plan.json",
|
||||
@@ -70,7 +70,7 @@
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P13-005/task-context.json",
|
||||
"sha256": "e7bc0cd9c3597454fdd329c2f997989feba68872cd572508d3b9a8b5716bc619"
|
||||
"sha256": "7f0cc80ddd84b5189e091e9346c5513eeb9f033caf44e5312c7046e64e7fe245"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
@@ -91,5 +91,10 @@
|
||||
"fullHistoricalReproduction": false,
|
||||
"deterministic": true
|
||||
},
|
||||
"nextTask": null
|
||||
"nextTask": "WBV2-P14-000",
|
||||
"continuation": {
|
||||
"authorized": true,
|
||||
"root": "WBV2-P14-000",
|
||||
"scope": "INVENTORY_COVERAGE_BATCHING"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
"provenance limitation stays explicit",
|
||||
"full historical reproduction remains false"
|
||||
],
|
||||
"nextTask": null,
|
||||
"nextTask": "WBV2-P14-000",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P13-005.md",
|
||||
@@ -166,7 +166,7 @@
|
||||
"totalTokens": 2319,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3343,
|
||||
"serializedContextTokens": 684,
|
||||
"serializedContextTokens": 687,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
|
||||
35
tests/golden/WBV2-P14-000/coverage-root-report.json
Normal file
35
tests/golden/WBV2-P14-000/coverage-root-report.json
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-000",
|
||||
"operation": "AUTHORIZE_INVENTORY_COVERAGE_CONTINUATION",
|
||||
"status": "PASS",
|
||||
"parent": {
|
||||
"task": "WBV2-P13-005",
|
||||
"manifest": "tests/golden/WBV2-P13-005/manifest.json",
|
||||
"manifestSha256": "475c4e36c013009a49c318773e4defe073a09cea2ee620638c0c333c44c5e62a",
|
||||
"report": "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json",
|
||||
"reportSha256": "f3af76ab509fa7856e7cd383279d9e30fe036f0977a0839a277d241c303b8903",
|
||||
"previousDecision": "READY_WITH_HIGH_VALUE_DOMAIN_PARITY",
|
||||
"fullHistoricalReproduction": false
|
||||
},
|
||||
"continuation": {
|
||||
"root": "WBV2-P14-000",
|
||||
"firstTask": "WBV2-P14-001",
|
||||
"plannedTasks": 4,
|
||||
"inventoryTotal": 6900,
|
||||
"inventoryPending": 6618,
|
||||
"capabilityBuckets": 15,
|
||||
"grouping": "capability-family",
|
||||
"browser": "chromium",
|
||||
"noRepeatedExecution": true
|
||||
},
|
||||
"policy": {
|
||||
"p13EvidencePreserved": true,
|
||||
"sourceHistoryReadOnly": true,
|
||||
"authorizedRebaselineOnly": true,
|
||||
"duplicateValidationAvoided": true,
|
||||
"inventoryRemainderExplicit": true,
|
||||
"fullHistoricalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P14-001"
|
||||
}
|
||||
147
tests/golden/WBV2-P14-000/coverage-task-plan.json
Normal file
147
tests/golden/WBV2-P14-000/coverage-task-plan.json
Normal file
@@ -0,0 +1,147 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_PARITY_V2_INVENTORY_COVERAGE_EPOCH_1",
|
||||
"status": "ACTIVE_INVENTORY_COVERAGE_QUEUE",
|
||||
"authority": "queue_reactivated_after_p13_high_value_gate",
|
||||
"productContract": "docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"browserEvidence": [
|
||||
"chromium"
|
||||
],
|
||||
"forbiddenBrowsers": [
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mainAuthority": "blender_main",
|
||||
"reusePolicy": "existing_receipts_before_new_runs"
|
||||
},
|
||||
"coveragePolicy": {
|
||||
"inventoryTotal": 6900,
|
||||
"pendingAtStart": 6618,
|
||||
"grouping": "capability-family",
|
||||
"duplicateValidation": "forbidden",
|
||||
"historicalBytes": "read-only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P14-000",
|
||||
"phase": "P14",
|
||||
"title": "authorize_inventory_coverage_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P13-005"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-governance",
|
||||
"gate": "G0",
|
||||
"card": "docs/tasks/WBV2-P14-000.md",
|
||||
"behavior": "Authorize a machine-readable 6900-entry coverage continuation without reopening completed production receipts.",
|
||||
"outputs": [
|
||||
"coverage root",
|
||||
"batch plan",
|
||||
"scope limits"
|
||||
],
|
||||
"acceptance": [
|
||||
"P13 evidence remains hash-bound",
|
||||
"inventory counts are deterministic",
|
||||
"one coverage task is active"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-001",
|
||||
"phase": "P14",
|
||||
"title": "generate_inventory_coverage_ledger",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-000"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-ledger",
|
||||
"gate": "G0",
|
||||
"card": "docs/tasks/WBV2-P14-001.md",
|
||||
"behavior": "Cluster all 6900 inventory entries by capability and bind representative evidence without repeated Blender or Chromium execution.",
|
||||
"outputs": [
|
||||
"coverage ledger",
|
||||
"capability counts",
|
||||
"batch digest"
|
||||
],
|
||||
"acceptance": [
|
||||
"all entries are accounted for",
|
||||
"pending remainder stays explicit",
|
||||
"existing receipts are reused",
|
||||
"no duplicate execution"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-002",
|
||||
"phase": "P14",
|
||||
"title": "reconcile_capability_evidence_matrix",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-001"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-matrix",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P14-002.md",
|
||||
"behavior": "Reconcile capability-level evidence classes and representative slices from the coverage ledger.",
|
||||
"outputs": [
|
||||
"evidence matrix",
|
||||
"claim map",
|
||||
"unproven map"
|
||||
],
|
||||
"acceptance": [
|
||||
"only hash-bound claims are promoted",
|
||||
"partial capability coverage is explicit",
|
||||
"6900 remainder is unchanged"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-003",
|
||||
"phase": "P14",
|
||||
"title": "close_inventory_coverage_gate",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-release",
|
||||
"gate": "G5",
|
||||
"card": "docs/tasks/WBV2-P14-003.md",
|
||||
"behavior": "Close the coverage gate with a limited declaration and machine-checkable batching policy.",
|
||||
"outputs": [
|
||||
"coverage gate",
|
||||
"efficiency declaration",
|
||||
"next batch policy"
|
||||
],
|
||||
"acceptance": [
|
||||
"all entries have a capability bucket",
|
||||
"feature claims remain evidence-bound",
|
||||
"no historical or inventory over-claim"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
58
tests/golden/WBV2-P14-000/manifest.json
Normal file
58
tests/golden/WBV2-P14-000/manifest.json
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-000",
|
||||
"parentTask": "WBV2-P13-005",
|
||||
"operation": "AUTHORIZE_INVENTORY_COVERAGE_CONTINUATION",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "READ_ONLY_INVENTORY_COVERAGE_ROOT",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P13-005/manifest.json",
|
||||
"sha256": "e35ca82b1e3b3ffe6b75171086530b3adf5ee8353a06ca63dbb665eda1ca4c03"
|
||||
},
|
||||
"parentReport": {
|
||||
"path": "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json",
|
||||
"sha256": "a2b20da742909c7095a71046aa39fd6f4fe63896fd9e7ef5cc238e877956a446"
|
||||
},
|
||||
"approval": {
|
||||
"path": "docs/status/M12-PROVENANCE-EPOCH-2-APPROVAL.json",
|
||||
"sha256": "cffc869734af94ffe6b8b8004d7ab8cc2c9edcb85ec2a877548e0b0f923f5ea3"
|
||||
},
|
||||
"parityMap": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8"
|
||||
},
|
||||
"capabilityMatrix": {
|
||||
"path": "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json",
|
||||
"sha256": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0"
|
||||
},
|
||||
"plan": {
|
||||
"path": "tests/golden/WBV2-P14-000/coverage-task-plan.json",
|
||||
"sha256": "e3a6bebef8cd565fb2b5a5e684759e4bd4957eafdfc1ba17d67b401b3ee00b2d"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P14-000/coverage-root-report.json",
|
||||
"sha256": "a83a09d44a00b61702ad86ea06d9ffbd7481a3e421c03c863950280f714dc1ef"
|
||||
},
|
||||
"rootCard": {
|
||||
"path": "docs/tasks/WBV2-P14-000.md",
|
||||
"sha256": "2c388b0e9ae1864276d4a06357af84e4d0052e0e1cdc32a49c98a23b61a3f4b7"
|
||||
},
|
||||
"rootStatus": {
|
||||
"path": "docs/status/WBV2-P14-000.md",
|
||||
"sha256": "43a054eaac25bf8453839b2ce431d0cfac0e1f9ac44308d6fee696d3ba3db9a4"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"p13EvidencePreserved": true,
|
||||
"inventoryTotal": 6900,
|
||||
"inventoryPending": 6618,
|
||||
"capabilityBuckets": 15,
|
||||
"duplicateValidationAvoided": true,
|
||||
"authorizedRebaselineOnly": true,
|
||||
"fullHistoricalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P14-001"
|
||||
}
|
||||
396
tests/golden/WBV2-P14-001/capability-batch-summary.json
Normal file
396
tests/golden/WBV2-P14-001/capability-batch-summary.json
Normal file
@@ -0,0 +1,396 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-001",
|
||||
"operation": "CAPABILITY_BATCH_SUMMARY",
|
||||
"sourceLedger": "tests/golden/WBV2-P14-001/inventory-coverage-ledger.json",
|
||||
"sourceLedgerSha256": "d754efb8d3917fa2052d76d2753cb3fb65e42ed744649fb3d0c988908b1f955e",
|
||||
"buckets": [
|
||||
{
|
||||
"capabilityId": "CAP-CORE-DNA-RNA",
|
||||
"family": "CORE_DNA_RNA",
|
||||
"layer": "CORE",
|
||||
"total": 38,
|
||||
"completed": 18,
|
||||
"pending": 20,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"datablock": 18,
|
||||
"rna": 20
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 38
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-CORE-MESH",
|
||||
"family": "CORE_MESH",
|
||||
"layer": "CORE",
|
||||
"total": 31,
|
||||
"completed": 1,
|
||||
"pending": 30,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"datablock": 1,
|
||||
"rna": 30
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 31
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-CORE-OBJECT",
|
||||
"family": "CORE_OBJECT",
|
||||
"layer": "CORE",
|
||||
"total": 2,
|
||||
"completed": 1,
|
||||
"pending": 1,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"CAP-SCENE-OBJECT-ENGINE"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "scene/object visibility and transform"
|
||||
},
|
||||
"kinds": {
|
||||
"datablock": 1,
|
||||
"rna": 1
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 2
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-CORE-SCENE-GRAPH",
|
||||
"family": "CORE_SCENE_GRAPH",
|
||||
"layer": "CORE",
|
||||
"total": 66,
|
||||
"completed": 9,
|
||||
"pending": 57,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"CAP-SCENE-OBJECT-ENGINE"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "scene/object visibility and transform"
|
||||
},
|
||||
"kinds": {
|
||||
"datablock": 9,
|
||||
"rna": 57
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 66
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MATERIAL-RENDER",
|
||||
"family": "MATERIAL_RENDER",
|
||||
"layer": "FEATURE",
|
||||
"total": 125,
|
||||
"completed": 0,
|
||||
"pending": 125,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"CAP-MATERIAL-ANIMATION-ENGINE"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "material/UV and animation receipt; render remains separate"
|
||||
},
|
||||
"kinds": {
|
||||
"node": 99,
|
||||
"operator": 26
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01C"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 125
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MEDIA-IO",
|
||||
"family": "MEDIA_IO",
|
||||
"layer": "FEATURE",
|
||||
"total": 585,
|
||||
"completed": 18,
|
||||
"pending": 566,
|
||||
"active": 1,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"io": 33,
|
||||
"operator": 528,
|
||||
"strip": 24
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01D"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 585
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MESH-EDITING",
|
||||
"family": "MESH_EDITING",
|
||||
"layer": "FEATURE",
|
||||
"total": 431,
|
||||
"completed": 0,
|
||||
"pending": 431,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"CAP-MESH-TOPOLOGY-FAMILY"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "six topology operations"
|
||||
},
|
||||
"kinds": {
|
||||
"operator": 431
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 431
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MODIFIER-SYSTEM",
|
||||
"family": "MODIFIER_SYSTEM",
|
||||
"layer": "FEATURE",
|
||||
"total": 83,
|
||||
"completed": 83,
|
||||
"pending": 0,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"CAP-MODIFIER-PARAMETER-APPLY"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "DECIMATE apply"
|
||||
},
|
||||
"kinds": {
|
||||
"modifier": 83
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01C"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 83
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-NODES-GRAPH",
|
||||
"family": "NODES_GRAPH",
|
||||
"layer": "FEATURE",
|
||||
"total": 543,
|
||||
"completed": 0,
|
||||
"pending": 543,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"NODES.GEOMETRY_ENGINE"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "three graph hashes; unsupported simulation rejected"
|
||||
},
|
||||
"kinds": {
|
||||
"node": 352,
|
||||
"operator": 191
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01C"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 543
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-OBJECT-OPERATIONS",
|
||||
"family": "OBJECT_OPERATIONS",
|
||||
"layer": "FEATURE",
|
||||
"total": 316,
|
||||
"completed": 0,
|
||||
"pending": 316,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"operator": 316
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 316
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-OTHER-OPERATOR",
|
||||
"family": "OTHER_OPERATOR",
|
||||
"layer": "FEATURE",
|
||||
"total": 103,
|
||||
"completed": 0,
|
||||
"pending": 103,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"operator": 103
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 103
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-RIG-ANIMATION",
|
||||
"family": "RIG_ANIMATION",
|
||||
"layer": "FEATURE",
|
||||
"total": 375,
|
||||
"completed": 151,
|
||||
"pending": 224,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"RIG.POSE_ENGINE"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "two bones and bounded constraint edit"
|
||||
},
|
||||
"kinds": {
|
||||
"constraint": 29,
|
||||
"operator": 346
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01C"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 375
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"family": "SCULPT_PAINT",
|
||||
"layer": "FEATURE",
|
||||
"total": 117,
|
||||
"completed": 0,
|
||||
"pending": 117,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"operator": 117
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 117
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-SIMULATION",
|
||||
"family": "SIMULATION",
|
||||
"layer": "FEATURE",
|
||||
"total": 155,
|
||||
"completed": 0,
|
||||
"pending": 155,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"operator": 90,
|
||||
"physics": 65
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01D"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 155
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-UI-EDITOR",
|
||||
"family": "UI_EDITOR",
|
||||
"layer": "UI",
|
||||
"total": 3930,
|
||||
"completed": 0,
|
||||
"pending": 3930,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"area": 19,
|
||||
"keymap-item": 3228,
|
||||
"keymap": 280,
|
||||
"operator": 338,
|
||||
"region": 17,
|
||||
"space-class": 16,
|
||||
"space": 19,
|
||||
"workspace": 13
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01E"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 3930
|
||||
}
|
||||
],
|
||||
"entryDigest": "06debe05e086868dcad99980a04161f71172df23a27e36e14670da94af3db516"
|
||||
}
|
||||
420
tests/golden/WBV2-P14-001/coverage-ledger-report.json
Normal file
420
tests/golden/WBV2-P14-001/coverage-ledger-report.json
Normal file
@@ -0,0 +1,420 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-001",
|
||||
"operation": "GENERATE_INVENTORY_COVERAGE_LEDGER",
|
||||
"status": "PASS",
|
||||
"ledgerSha256": "d754efb8d3917fa2052d76d2753cb3fb65e42ed744649fb3d0c988908b1f955e",
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"completed": 281,
|
||||
"pending": 6618,
|
||||
"active": 1,
|
||||
"capabilityBuckets": 15,
|
||||
"remainderExplicit": true
|
||||
},
|
||||
"entryDigest": "06debe05e086868dcad99980a04161f71172df23a27e36e14670da94af3db516",
|
||||
"buckets": [
|
||||
{
|
||||
"capabilityId": "CAP-CORE-DNA-RNA",
|
||||
"family": "CORE_DNA_RNA",
|
||||
"layer": "CORE",
|
||||
"total": 38,
|
||||
"completed": 18,
|
||||
"pending": 20,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"datablock": 18,
|
||||
"rna": 20
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 38
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-CORE-MESH",
|
||||
"family": "CORE_MESH",
|
||||
"layer": "CORE",
|
||||
"total": 31,
|
||||
"completed": 1,
|
||||
"pending": 30,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"datablock": 1,
|
||||
"rna": 30
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 31
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-CORE-OBJECT",
|
||||
"family": "CORE_OBJECT",
|
||||
"layer": "CORE",
|
||||
"total": 2,
|
||||
"completed": 1,
|
||||
"pending": 1,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"CAP-SCENE-OBJECT-ENGINE"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "scene/object visibility and transform"
|
||||
},
|
||||
"kinds": {
|
||||
"datablock": 1,
|
||||
"rna": 1
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 2
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-CORE-SCENE-GRAPH",
|
||||
"family": "CORE_SCENE_GRAPH",
|
||||
"layer": "CORE",
|
||||
"total": 66,
|
||||
"completed": 9,
|
||||
"pending": 57,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"CAP-SCENE-OBJECT-ENGINE"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "scene/object visibility and transform"
|
||||
},
|
||||
"kinds": {
|
||||
"datablock": 9,
|
||||
"rna": 57
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 66
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MATERIAL-RENDER",
|
||||
"family": "MATERIAL_RENDER",
|
||||
"layer": "FEATURE",
|
||||
"total": 125,
|
||||
"completed": 0,
|
||||
"pending": 125,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"CAP-MATERIAL-ANIMATION-ENGINE"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "material/UV and animation receipt; render remains separate"
|
||||
},
|
||||
"kinds": {
|
||||
"node": 99,
|
||||
"operator": 26
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01C"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 125
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MEDIA-IO",
|
||||
"family": "MEDIA_IO",
|
||||
"layer": "FEATURE",
|
||||
"total": 585,
|
||||
"completed": 18,
|
||||
"pending": 566,
|
||||
"active": 1,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"io": 33,
|
||||
"operator": 528,
|
||||
"strip": 24
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01D"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 585
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MESH-EDITING",
|
||||
"family": "MESH_EDITING",
|
||||
"layer": "FEATURE",
|
||||
"total": 431,
|
||||
"completed": 0,
|
||||
"pending": 431,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"CAP-MESH-TOPOLOGY-FAMILY"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "six topology operations"
|
||||
},
|
||||
"kinds": {
|
||||
"operator": 431
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 431
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MODIFIER-SYSTEM",
|
||||
"family": "MODIFIER_SYSTEM",
|
||||
"layer": "FEATURE",
|
||||
"total": 83,
|
||||
"completed": 83,
|
||||
"pending": 0,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"CAP-MODIFIER-PARAMETER-APPLY"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "DECIMATE apply"
|
||||
},
|
||||
"kinds": {
|
||||
"modifier": 83
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01C"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 83
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-NODES-GRAPH",
|
||||
"family": "NODES_GRAPH",
|
||||
"layer": "FEATURE",
|
||||
"total": 543,
|
||||
"completed": 0,
|
||||
"pending": 543,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"NODES.GEOMETRY_ENGINE"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "three graph hashes; unsupported simulation rejected"
|
||||
},
|
||||
"kinds": {
|
||||
"node": 352,
|
||||
"operator": 191
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01C"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 543
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-OBJECT-OPERATIONS",
|
||||
"family": "OBJECT_OPERATIONS",
|
||||
"layer": "FEATURE",
|
||||
"total": 316,
|
||||
"completed": 0,
|
||||
"pending": 316,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"operator": 316
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 316
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-OTHER-OPERATOR",
|
||||
"family": "OTHER_OPERATOR",
|
||||
"layer": "FEATURE",
|
||||
"total": 103,
|
||||
"completed": 0,
|
||||
"pending": 103,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"operator": 103
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 103
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-RIG-ANIMATION",
|
||||
"family": "RIG_ANIMATION",
|
||||
"layer": "FEATURE",
|
||||
"total": 375,
|
||||
"completed": 151,
|
||||
"pending": 224,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [
|
||||
"RIG.POSE_ENGINE"
|
||||
],
|
||||
"mode": "REPRESENTATIVE_SLICE",
|
||||
"evidence": "two bones and bounded constraint edit"
|
||||
},
|
||||
"kinds": {
|
||||
"constraint": 29,
|
||||
"operator": 346
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01C"
|
||||
],
|
||||
"evidenceState": "PARTIAL_REPRESENTATIVE",
|
||||
"claimCount": 1,
|
||||
"entries": 375
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"family": "SCULPT_PAINT",
|
||||
"layer": "FEATURE",
|
||||
"total": 117,
|
||||
"completed": 0,
|
||||
"pending": 117,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"operator": 117
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 117
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-SIMULATION",
|
||||
"family": "SIMULATION",
|
||||
"layer": "FEATURE",
|
||||
"total": 155,
|
||||
"completed": 0,
|
||||
"pending": 155,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"operator": 90,
|
||||
"physics": 65
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01D"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 155
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-UI-EDITOR",
|
||||
"family": "UI_EDITOR",
|
||||
"layer": "UI",
|
||||
"total": 3930,
|
||||
"completed": 0,
|
||||
"pending": 3930,
|
||||
"active": 0,
|
||||
"representativeEvidence": {
|
||||
"claims": [],
|
||||
"mode": "UNPROVEN",
|
||||
"evidence": "no engine-bound receipt"
|
||||
},
|
||||
"kinds": {
|
||||
"area": 19,
|
||||
"keymap-item": 3228,
|
||||
"keymap": 280,
|
||||
"operator": 338,
|
||||
"region": 17,
|
||||
"space-class": 16,
|
||||
"space": 19,
|
||||
"workspace": 13
|
||||
},
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01E"
|
||||
],
|
||||
"evidenceState": "UNPROVEN",
|
||||
"claimCount": 0,
|
||||
"entries": 3930
|
||||
}
|
||||
],
|
||||
"efficiency": {
|
||||
"fullInventoryStreamed": true,
|
||||
"existingReceiptsReused": true,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true,
|
||||
"oneLedgerScan": true
|
||||
},
|
||||
"policy": {
|
||||
"grouping": "CAPABILITY_FAMILY",
|
||||
"reuseExistingReceipts": true,
|
||||
"duplicateValidationAvoided": true,
|
||||
"historicalBytesReadOnly": true,
|
||||
"partialClaimsExplicit": true
|
||||
},
|
||||
"nextTask": "WBV2-P14-002"
|
||||
}
|
||||
151
tests/golden/WBV2-P14-001/coverage-task-plan.json
Normal file
151
tests/golden/WBV2-P14-001/coverage-task-plan.json
Normal file
@@ -0,0 +1,151 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_PARITY_V2_INVENTORY_COVERAGE_EPOCH_1",
|
||||
"status": "ACTIVE_INVENTORY_COVERAGE_QUEUE",
|
||||
"authority": "queue_reactivated_after_p13_high_value_gate",
|
||||
"productContract": "docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"browserEvidence": [
|
||||
"chromium"
|
||||
],
|
||||
"forbiddenBrowsers": [
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mainAuthority": "blender_main",
|
||||
"reusePolicy": "existing_receipts_before_new_runs"
|
||||
},
|
||||
"coveragePolicy": {
|
||||
"inventoryTotal": 6900,
|
||||
"pendingAtStart": 6618,
|
||||
"grouping": "capability-family",
|
||||
"duplicateValidation": "forbidden",
|
||||
"historicalBytes": "read-only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P14-000",
|
||||
"phase": "P14",
|
||||
"title": "authorize_inventory_coverage_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P13-005"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-governance",
|
||||
"gate": "G0",
|
||||
"card": "docs/tasks/WBV2-P14-000.md",
|
||||
"behavior": "Authorize a machine-readable 6900-entry coverage continuation without reopening completed production receipts.",
|
||||
"outputs": [
|
||||
"coverage root",
|
||||
"batch plan",
|
||||
"scope limits"
|
||||
],
|
||||
"acceptance": [
|
||||
"P13 evidence remains hash-bound",
|
||||
"inventory counts are deterministic",
|
||||
"one coverage task is active"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-001",
|
||||
"phase": "P14",
|
||||
"title": "generate_inventory_coverage_ledger",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-000"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-ledger",
|
||||
"gate": "G0",
|
||||
"card": "docs/tasks/WBV2-P14-001.md",
|
||||
"behavior": "Cluster all 6900 inventory entries by capability and bind representative evidence without repeated Blender or Chromium execution.",
|
||||
"outputs": [
|
||||
"coverage ledger",
|
||||
"capability counts",
|
||||
"batch digest"
|
||||
],
|
||||
"acceptance": [
|
||||
"all entries are accounted for",
|
||||
"pending remainder stays explicit",
|
||||
"existing receipts are reused",
|
||||
"no duplicate execution"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-002",
|
||||
"phase": "P14",
|
||||
"title": "reconcile_capability_evidence_matrix",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-001"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-matrix",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P14-002.md",
|
||||
"behavior": "Reconcile capability-level evidence classes and representative slices from the coverage ledger.",
|
||||
"outputs": [
|
||||
"evidence matrix",
|
||||
"claim map",
|
||||
"unproven map"
|
||||
],
|
||||
"acceptance": [
|
||||
"only hash-bound claims are promoted",
|
||||
"partial capability coverage is explicit",
|
||||
"6900 remainder is unchanged"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-003",
|
||||
"phase": "P14",
|
||||
"title": "close_inventory_coverage_gate",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-release",
|
||||
"gate": "G5",
|
||||
"card": "docs/tasks/WBV2-P14-003.md",
|
||||
"behavior": "Close the coverage gate with a limited declaration and machine-checkable batching policy.",
|
||||
"outputs": [
|
||||
"coverage gate",
|
||||
"efficiency declaration",
|
||||
"next batch policy"
|
||||
],
|
||||
"acceptance": [
|
||||
"all entries have a capability bucket",
|
||||
"feature claims remain evidence-bound",
|
||||
"no historical or inventory over-claim"
|
||||
],
|
||||
"status": "planned",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
],
|
||||
"parentRecoveryPlan": {
|
||||
"path": "tests/golden/WBV2-P14-000/coverage-task-plan.json",
|
||||
"sha256": "e3a6bebef8cd565fb2b5a5e684759e4bd4957eafdfc1ba17d67b401b3ee00b2d"
|
||||
}
|
||||
}
|
||||
69442
tests/golden/WBV2-P14-001/inventory-coverage-ledger.json
Normal file
69442
tests/golden/WBV2-P14-001/inventory-coverage-ledger.json
Normal file
File diff suppressed because it is too large
Load Diff
68
tests/golden/WBV2-P14-001/manifest.json
Normal file
68
tests/golden/WBV2-P14-001/manifest.json
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-001",
|
||||
"parentTask": "WBV2-P14-000",
|
||||
"operation": "GENERATE_INVENTORY_COVERAGE_LEDGER",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "READ_ONLY_STREAMED_INVENTORY_LEDGER",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P14-000/manifest.json",
|
||||
"sha256": "0e5230014338d617ff31ac445173c4c5ddf79cf5cc5d2f9ce4f16475286181e9"
|
||||
},
|
||||
"inventory": {
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"sha256": "a60a77cae000941a953d55adbf93d8f6e275533891713d6eae993f60faed94e8"
|
||||
},
|
||||
"p13Gate": {
|
||||
"path": "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json",
|
||||
"sha256": "a2b20da742909c7095a71046aa39fd6f4fe63896fd9e7ef5cc238e877956a446"
|
||||
},
|
||||
"ledger": {
|
||||
"path": "tests/golden/WBV2-P14-001/inventory-coverage-ledger.json",
|
||||
"sha256": "d754efb8d3917fa2052d76d2753cb3fb65e42ed744649fb3d0c988908b1f955e"
|
||||
},
|
||||
"batchSummary": {
|
||||
"path": "tests/golden/WBV2-P14-001/capability-batch-summary.json",
|
||||
"sha256": "cf7faa61328c3196cef39fad472372d3437a3c64979ac8026675657d6cbef014"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P14-001/coverage-ledger-report.json",
|
||||
"sha256": "481122e1808dc3bbc7f652ea81000789bdbf6ad3a62ac939180a383afd35aa54"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generate-wbv2-coverage-ledger.mjs",
|
||||
"sha256": "c0f1b6b1d7011917dd0b585684bd4ec07ae8b2b3af5b551f653ffb924b391f14"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P14-001.md",
|
||||
"sha256": "9c62f9bdfc2e25517cb4aabf1f4142f7661dad74b91afdd21b129472248e3182"
|
||||
},
|
||||
"parityPlan": {
|
||||
"path": "tests/golden/WBV2-P14-001/coverage-task-plan.json",
|
||||
"sha256": "c0c16d09800f481aa9d3c77a2cf690f03cb88245f47705228daaaa67f7ca57c6"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P14-001/task-context.json",
|
||||
"sha256": "e0f3c55b250e03cf115d57c451b890eaf079370bc71752114dcadafe13eaca1c"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"inventoryTotal": 6900,
|
||||
"completedEntries": 281,
|
||||
"activeEntries": 1,
|
||||
"pendingEntries": 6618,
|
||||
"capabilityBuckets": 15,
|
||||
"allEntriesAccounted": true,
|
||||
"representativeEvidenceBuckets": 7,
|
||||
"unprovenBuckets": 8,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true,
|
||||
"deterministic": true,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P14-002"
|
||||
}
|
||||
176
tests/golden/WBV2-P14-001/task-context.json
Normal file
176
tests/golden/WBV2-P14-001/task-context.json
Normal file
@@ -0,0 +1,176 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-001",
|
||||
"parentTask": "WBV2-P14-000",
|
||||
"status": "in_progress",
|
||||
"goal": "Cluster all 6900 inventory entries by capability and bind representative evidence without repeated Blender or Chromium execution.",
|
||||
"scope": {
|
||||
"gap": "workflow:generate_inventory_coverage_ledger",
|
||||
"ownerFamily": "PARITY",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/generate-wbv2-coverage-ledger.mjs --write",
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P14-001 --write"
|
||||
],
|
||||
"inputPaths": [
|
||||
"tests/golden/WBV2-P14-000/coverage-root-report.json"
|
||||
],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 3304,
|
||||
"contextRemainingTokens": 825
|
||||
},
|
||||
"source": {
|
||||
"bytes": 6600,
|
||||
"tokens": 1651
|
||||
},
|
||||
"selected": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-000/coverage-root-report.json",
|
||||
"bytes": 1164,
|
||||
"tokens": 291
|
||||
}
|
||||
],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P0-002/parity-map.json",
|
||||
"bytes": 5053386,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-000/manifest.json",
|
||||
"bytes": 0,
|
||||
"reason": "ALREADY_IN_CONTEXT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-001/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P14-001.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-001/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 1,
|
||||
"bytes": 1164,
|
||||
"tokens": 291
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"all entries are accounted for",
|
||||
"pending remainder stays explicit",
|
||||
"existing receipts are reused",
|
||||
"no duplicate execution"
|
||||
],
|
||||
"nextTask": "WBV2-P14-002",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P14-001.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P14-000/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P14-000.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P14-001.md",
|
||||
"tests/golden/WBV2-P14-000/manifest.json",
|
||||
"docs/status/WBV2-P14-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-P14-000",
|
||||
"parentTask": "WBV2-P13-005",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P14-001",
|
||||
"artifactCount": 9
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P14-000 status",
|
||||
"- task: `WBV2-P14-000`; parent: `WBV2-P13-005`; status: `done`",
|
||||
"- inventory scope: `6900` total, `6618` pending",
|
||||
"- capability buckets: `15`; duplicate validation: `forbidden`",
|
||||
"- nextTask: `WBV2-P14-001`",
|
||||
"P14 is an authorized coverage continuation. It preserves the P13 high-value declaration and starts with a capability-family ledger so one representative receipt can be reused without claiming the entire family is complete."
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1232,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 35,
|
||||
"taskTokens": 308
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P14-001.md",
|
||||
"bytes": 1232,
|
||||
"lines": 35,
|
||||
"tokens": 308
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-000/manifest.json",
|
||||
"bytes": 2118,
|
||||
"lines": 59,
|
||||
"tokens": 530
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P14-000.md",
|
||||
"bytes": 447,
|
||||
"lines": 9,
|
||||
"tokens": 112
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1651,
|
||||
"evidenceFiles": 1,
|
||||
"evidenceBytes": 1164,
|
||||
"evidenceTokens": 291,
|
||||
"totalTokens": 1942,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2966,
|
||||
"serializedContextTokens": 691,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
373
tests/golden/WBV2-P14-002/capability-evidence-matrix.json
Normal file
373
tests/golden/WBV2-P14-002/capability-evidence-matrix.json
Normal file
@@ -0,0 +1,373 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-002",
|
||||
"operation": "CAPABILITY_EVIDENCE_MATRIX_RECONCILIATION",
|
||||
"status": "READY",
|
||||
"source": {
|
||||
"ledger": "tests/golden/WBV2-P14-001/inventory-coverage-ledger.json",
|
||||
"ledgerSha256": "d754efb8d3917fa2052d76d2753cb3fb65e42ed744649fb3d0c988908b1f955e",
|
||||
"ledgerReport": "tests/golden/WBV2-P14-001/coverage-ledger-report.json",
|
||||
"ledgerReportSha256": "481122e1808dc3bbc7f652ea81000789bdbf6ad3a62ac939180a383afd35aa54",
|
||||
"highValueGate": "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json",
|
||||
"highValueGateSha256": "a2b20da742909c7095a71046aa39fd6f4fe63896fd9e7ef5cc238e877956a446",
|
||||
"template": "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json",
|
||||
"templateSha256": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0"
|
||||
},
|
||||
"policy": {
|
||||
"representativeClaimsDoNotCloseFamily": true,
|
||||
"fullFamilyParityRequiresEntryEvidence": true,
|
||||
"inventoryRemainderExplicit": true,
|
||||
"historicalBytesReadOnly": true,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"completed": 281,
|
||||
"active": 1,
|
||||
"pending": 6618,
|
||||
"buckets": 15
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"capabilityId": "CAP-CORE-DNA-RNA",
|
||||
"family": "CORE_DNA_RNA",
|
||||
"layer": "CORE",
|
||||
"total": 38,
|
||||
"completed": 18,
|
||||
"pending": 20,
|
||||
"active": 0,
|
||||
"evidenceClass": "UNPROVEN_PENDING",
|
||||
"representativeClaims": [],
|
||||
"representativeEvidence": "no engine-bound receipt",
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"kinds": {
|
||||
"datablock": 18,
|
||||
"rna": 20
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-CORE-MESH",
|
||||
"family": "CORE_MESH",
|
||||
"layer": "CORE",
|
||||
"total": 31,
|
||||
"completed": 1,
|
||||
"pending": 30,
|
||||
"active": 0,
|
||||
"evidenceClass": "UNPROVEN_PENDING",
|
||||
"representativeClaims": [],
|
||||
"representativeEvidence": "no engine-bound receipt",
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"kinds": {
|
||||
"datablock": 1,
|
||||
"rna": 30
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-CORE-OBJECT",
|
||||
"family": "CORE_OBJECT",
|
||||
"layer": "CORE",
|
||||
"total": 2,
|
||||
"completed": 1,
|
||||
"pending": 1,
|
||||
"active": 0,
|
||||
"evidenceClass": "PARTIAL_REPRESENTATIVE",
|
||||
"representativeClaims": [
|
||||
"CAP-SCENE-OBJECT-ENGINE"
|
||||
],
|
||||
"representativeEvidence": "scene/object visibility and transform",
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"kinds": {
|
||||
"datablock": 1,
|
||||
"rna": 1
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-CORE-SCENE-GRAPH",
|
||||
"family": "CORE_SCENE_GRAPH",
|
||||
"layer": "CORE",
|
||||
"total": 66,
|
||||
"completed": 9,
|
||||
"pending": 57,
|
||||
"active": 0,
|
||||
"evidenceClass": "PARTIAL_REPRESENTATIVE",
|
||||
"representativeClaims": [
|
||||
"CAP-SCENE-OBJECT-ENGINE"
|
||||
],
|
||||
"representativeEvidence": "scene/object visibility and transform",
|
||||
"sourceTasks": [
|
||||
"M15-01A",
|
||||
"M15-01F"
|
||||
],
|
||||
"kinds": {
|
||||
"datablock": 9,
|
||||
"rna": 57
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MATERIAL-RENDER",
|
||||
"family": "MATERIAL_RENDER",
|
||||
"layer": "FEATURE",
|
||||
"total": 125,
|
||||
"completed": 0,
|
||||
"pending": 125,
|
||||
"active": 0,
|
||||
"evidenceClass": "PARTIAL_REPRESENTATIVE",
|
||||
"representativeClaims": [
|
||||
"CAP-MATERIAL-ANIMATION-ENGINE"
|
||||
],
|
||||
"representativeEvidence": "material/UV and animation receipt; render remains separate",
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01C"
|
||||
],
|
||||
"kinds": {
|
||||
"node": 99,
|
||||
"operator": 26
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MEDIA-IO",
|
||||
"family": "MEDIA_IO",
|
||||
"layer": "FEATURE",
|
||||
"total": 585,
|
||||
"completed": 18,
|
||||
"pending": 566,
|
||||
"active": 1,
|
||||
"evidenceClass": "ACTIVE_UNPROVEN",
|
||||
"representativeClaims": [],
|
||||
"representativeEvidence": "no engine-bound receipt",
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01D"
|
||||
],
|
||||
"kinds": {
|
||||
"io": 33,
|
||||
"operator": 528,
|
||||
"strip": 24
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MESH-EDITING",
|
||||
"family": "MESH_EDITING",
|
||||
"layer": "FEATURE",
|
||||
"total": 431,
|
||||
"completed": 0,
|
||||
"pending": 431,
|
||||
"active": 0,
|
||||
"evidenceClass": "PARTIAL_REPRESENTATIVE",
|
||||
"representativeClaims": [
|
||||
"CAP-MESH-TOPOLOGY-FAMILY"
|
||||
],
|
||||
"representativeEvidence": "six topology operations",
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"kinds": {
|
||||
"operator": 431
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-MODIFIER-SYSTEM",
|
||||
"family": "MODIFIER_SYSTEM",
|
||||
"layer": "FEATURE",
|
||||
"total": 83,
|
||||
"completed": 83,
|
||||
"pending": 0,
|
||||
"active": 0,
|
||||
"evidenceClass": "PARTIAL_REPRESENTATIVE",
|
||||
"representativeClaims": [
|
||||
"CAP-MODIFIER-PARAMETER-APPLY"
|
||||
],
|
||||
"representativeEvidence": "DECIMATE apply",
|
||||
"sourceTasks": [
|
||||
"M15-01C"
|
||||
],
|
||||
"kinds": {
|
||||
"modifier": 83
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-NODES-GRAPH",
|
||||
"family": "NODES_GRAPH",
|
||||
"layer": "FEATURE",
|
||||
"total": 543,
|
||||
"completed": 0,
|
||||
"pending": 543,
|
||||
"active": 0,
|
||||
"evidenceClass": "PARTIAL_REPRESENTATIVE",
|
||||
"representativeClaims": [
|
||||
"NODES.GEOMETRY_ENGINE"
|
||||
],
|
||||
"representativeEvidence": "three graph hashes; unsupported simulation rejected",
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01C"
|
||||
],
|
||||
"kinds": {
|
||||
"node": 352,
|
||||
"operator": 191
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-OBJECT-OPERATIONS",
|
||||
"family": "OBJECT_OPERATIONS",
|
||||
"layer": "FEATURE",
|
||||
"total": 316,
|
||||
"completed": 0,
|
||||
"pending": 316,
|
||||
"active": 0,
|
||||
"evidenceClass": "UNPROVEN_PENDING",
|
||||
"representativeClaims": [],
|
||||
"representativeEvidence": "no engine-bound receipt",
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"kinds": {
|
||||
"operator": 316
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-OTHER-OPERATOR",
|
||||
"family": "OTHER_OPERATOR",
|
||||
"layer": "FEATURE",
|
||||
"total": 103,
|
||||
"completed": 0,
|
||||
"pending": 103,
|
||||
"active": 0,
|
||||
"evidenceClass": "UNPROVEN_PENDING",
|
||||
"representativeClaims": [],
|
||||
"representativeEvidence": "no engine-bound receipt",
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"kinds": {
|
||||
"operator": 103
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-RIG-ANIMATION",
|
||||
"family": "RIG_ANIMATION",
|
||||
"layer": "FEATURE",
|
||||
"total": 375,
|
||||
"completed": 151,
|
||||
"pending": 224,
|
||||
"active": 0,
|
||||
"evidenceClass": "PARTIAL_REPRESENTATIVE",
|
||||
"representativeClaims": [
|
||||
"RIG.POSE_ENGINE"
|
||||
],
|
||||
"representativeEvidence": "two bones and bounded constraint edit",
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01C"
|
||||
],
|
||||
"kinds": {
|
||||
"constraint": 29,
|
||||
"operator": 346
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"family": "SCULPT_PAINT",
|
||||
"layer": "FEATURE",
|
||||
"total": 117,
|
||||
"completed": 0,
|
||||
"pending": 117,
|
||||
"active": 0,
|
||||
"evidenceClass": "UNPROVEN_PENDING",
|
||||
"representativeClaims": [],
|
||||
"representativeEvidence": "no engine-bound receipt",
|
||||
"sourceTasks": [
|
||||
"M15-01B"
|
||||
],
|
||||
"kinds": {
|
||||
"operator": 117
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-SIMULATION",
|
||||
"family": "SIMULATION",
|
||||
"layer": "FEATURE",
|
||||
"total": 155,
|
||||
"completed": 0,
|
||||
"pending": 155,
|
||||
"active": 0,
|
||||
"evidenceClass": "UNPROVEN_PENDING",
|
||||
"representativeClaims": [],
|
||||
"representativeEvidence": "no engine-bound receipt",
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01D"
|
||||
],
|
||||
"kinds": {
|
||||
"operator": 90,
|
||||
"physics": 65
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
},
|
||||
{
|
||||
"capabilityId": "CAP-UI-EDITOR",
|
||||
"family": "UI_EDITOR",
|
||||
"layer": "UI",
|
||||
"total": 3930,
|
||||
"completed": 0,
|
||||
"pending": 3930,
|
||||
"active": 0,
|
||||
"evidenceClass": "UNPROVEN_PENDING",
|
||||
"representativeClaims": [],
|
||||
"representativeEvidence": "no engine-bound receipt",
|
||||
"sourceTasks": [
|
||||
"M15-01B",
|
||||
"M15-01E"
|
||||
],
|
||||
"kinds": {
|
||||
"area": 19,
|
||||
"keymap-item": 3228,
|
||||
"keymap": 280,
|
||||
"operator": 338,
|
||||
"region": 17,
|
||||
"space-class": 16,
|
||||
"space": 19,
|
||||
"workspace": 13
|
||||
},
|
||||
"fullFamilyParity": false,
|
||||
"inventoryRemainderExplicit": true
|
||||
}
|
||||
]
|
||||
}
|
||||
45
tests/golden/WBV2-P14-002/capability-evidence-report.json
Normal file
45
tests/golden/WBV2-P14-002/capability-evidence-report.json
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-002",
|
||||
"operation": "RECONCILE_CAPABILITY_EVIDENCE_MATRIX",
|
||||
"status": "PASS",
|
||||
"matrixSha256": "06a987b3911999c4c4983c89841318cd053ae30465ae83d49e6eeff566b462b8",
|
||||
"inventory": {
|
||||
"total": 6900,
|
||||
"completed": 281,
|
||||
"active": 1,
|
||||
"pending": 6618,
|
||||
"buckets": 15
|
||||
},
|
||||
"evidenceClasses": {
|
||||
"partialRepresentative": 7,
|
||||
"unprovenPending": 7,
|
||||
"activeUnproven": 1,
|
||||
"legacyCompletedNoEngineClaim": 0
|
||||
},
|
||||
"featureClaims": [
|
||||
"CAP-MESH-TOPOLOGY-FAMILY",
|
||||
"CAP-MODIFIER-PARAMETER-APPLY",
|
||||
"CAP-ASSET-LINK-OVERRIDE-RELOAD",
|
||||
"CAP-SCENE-OBJECT-ENGINE",
|
||||
"CAP-MATERIAL-ANIMATION-ENGINE",
|
||||
"CAP-VIEWPORT-NONMESH-ENGINE",
|
||||
"NODES.GEOMETRY_ENGINE",
|
||||
"RIG.POSE_ENGINE"
|
||||
],
|
||||
"efficiency": {
|
||||
"oneLedgerInput": true,
|
||||
"existingReceiptsReused": true,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"policy": {
|
||||
"representativeClaimsDoNotCloseFamily": true,
|
||||
"fullFamilyParityRequiresEntryEvidence": true,
|
||||
"inventoryRemainderExplicit": true,
|
||||
"historicalBytesReadOnly": true,
|
||||
"duplicateValidationAvoided": true
|
||||
},
|
||||
"nextTask": "WBV2-P14-003"
|
||||
}
|
||||
151
tests/golden/WBV2-P14-002/coverage-task-plan.json
Normal file
151
tests/golden/WBV2-P14-002/coverage-task-plan.json
Normal file
@@ -0,0 +1,151 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_PARITY_V2_INVENTORY_COVERAGE_EPOCH_1",
|
||||
"status": "ACTIVE_INVENTORY_COVERAGE_QUEUE",
|
||||
"authority": "queue_reactivated_after_p13_high_value_gate",
|
||||
"productContract": "docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"browserEvidence": [
|
||||
"chromium"
|
||||
],
|
||||
"forbiddenBrowsers": [
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mainAuthority": "blender_main",
|
||||
"reusePolicy": "existing_receipts_before_new_runs"
|
||||
},
|
||||
"coveragePolicy": {
|
||||
"inventoryTotal": 6900,
|
||||
"pendingAtStart": 6618,
|
||||
"grouping": "capability-family",
|
||||
"duplicateValidation": "forbidden",
|
||||
"historicalBytes": "read-only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P14-000",
|
||||
"phase": "P14",
|
||||
"title": "authorize_inventory_coverage_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P13-005"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-governance",
|
||||
"gate": "G0",
|
||||
"card": "docs/tasks/WBV2-P14-000.md",
|
||||
"behavior": "Authorize a machine-readable 6900-entry coverage continuation without reopening completed production receipts.",
|
||||
"outputs": [
|
||||
"coverage root",
|
||||
"batch plan",
|
||||
"scope limits"
|
||||
],
|
||||
"acceptance": [
|
||||
"P13 evidence remains hash-bound",
|
||||
"inventory counts are deterministic",
|
||||
"one coverage task is active"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-001",
|
||||
"phase": "P14",
|
||||
"title": "generate_inventory_coverage_ledger",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-000"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-ledger",
|
||||
"gate": "G0",
|
||||
"card": "docs/tasks/WBV2-P14-001.md",
|
||||
"behavior": "Cluster all 6900 inventory entries by capability and bind representative evidence without repeated Blender or Chromium execution.",
|
||||
"outputs": [
|
||||
"coverage ledger",
|
||||
"capability counts",
|
||||
"batch digest"
|
||||
],
|
||||
"acceptance": [
|
||||
"all entries are accounted for",
|
||||
"pending remainder stays explicit",
|
||||
"existing receipts are reused",
|
||||
"no duplicate execution"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-002",
|
||||
"phase": "P14",
|
||||
"title": "reconcile_capability_evidence_matrix",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-001"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-matrix",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P14-002.md",
|
||||
"behavior": "Reconcile capability-level evidence classes and representative slices from the coverage ledger.",
|
||||
"outputs": [
|
||||
"evidence matrix",
|
||||
"claim map",
|
||||
"unproven map"
|
||||
],
|
||||
"acceptance": [
|
||||
"only hash-bound claims are promoted",
|
||||
"partial capability coverage is explicit",
|
||||
"6900 remainder is unchanged"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-003",
|
||||
"phase": "P14",
|
||||
"title": "close_inventory_coverage_gate",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-release",
|
||||
"gate": "G5",
|
||||
"card": "docs/tasks/WBV2-P14-003.md",
|
||||
"behavior": "Close the coverage gate with a limited declaration and machine-checkable batching policy.",
|
||||
"outputs": [
|
||||
"coverage gate",
|
||||
"efficiency declaration",
|
||||
"next batch policy"
|
||||
],
|
||||
"acceptance": [
|
||||
"all entries have a capability bucket",
|
||||
"feature claims remain evidence-bound",
|
||||
"no historical or inventory over-claim"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
],
|
||||
"parentRecoveryPlan": {
|
||||
"path": "tests/golden/WBV2-P14-001/coverage-task-plan.json",
|
||||
"sha256": "c0c16d09800f481aa9d3c77a2cf690f03cb88245f47705228daaaa67f7ca57c6"
|
||||
}
|
||||
}
|
||||
72
tests/golden/WBV2-P14-002/manifest.json
Normal file
72
tests/golden/WBV2-P14-002/manifest.json
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-002",
|
||||
"parentTask": "WBV2-P14-001",
|
||||
"operation": "RECONCILE_CAPABILITY_EVIDENCE_MATRIX",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "READ_ONLY_CAPABILITY_EVIDENCE_RECONCILIATION",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P14-001/manifest.json",
|
||||
"sha256": "f260bd3878a0e72cc2cf71e02cea345adb89e6f22d722d720a530aeb2e9066c3"
|
||||
},
|
||||
"ledger": {
|
||||
"path": "tests/golden/WBV2-P14-001/inventory-coverage-ledger.json",
|
||||
"sha256": "d754efb8d3917fa2052d76d2753cb3fb65e42ed744649fb3d0c988908b1f955e"
|
||||
},
|
||||
"ledgerReport": {
|
||||
"path": "tests/golden/WBV2-P14-001/coverage-ledger-report.json",
|
||||
"sha256": "481122e1808dc3bbc7f652ea81000789bdbf6ad3a62ac939180a383afd35aa54"
|
||||
},
|
||||
"highValueGate": {
|
||||
"path": "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json",
|
||||
"sha256": "a2b20da742909c7095a71046aa39fd6f4fe63896fd9e7ef5cc238e877956a446"
|
||||
},
|
||||
"matrixTemplate": {
|
||||
"path": "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json",
|
||||
"sha256": "053e1551a24da08e045bb54115858a892ddd825fa59f1691a26a1ccfc1db3ca0"
|
||||
},
|
||||
"matrix": {
|
||||
"path": "tests/golden/WBV2-P14-002/capability-evidence-matrix.json",
|
||||
"sha256": "06a987b3911999c4c4983c89841318cd053ae30465ae83d49e6eeff566b462b8"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P14-002/capability-evidence-report.json",
|
||||
"sha256": "6460618e4aff0f12d65791e6f68f413bf13ce22fe7ea3cc935fd5f76101415da"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generate-wbv2-capability-evidence-matrix.mjs",
|
||||
"sha256": "c0ea1a2fc5a6433858f9dbf66163f1c688d84ab5ba96984f5e7ce5786b93f90d"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P14-002.md",
|
||||
"sha256": "c42de7dabf11b58ca05e813857f3c94a4915fa72781674afbda15670aebeab3a"
|
||||
},
|
||||
"parityPlan": {
|
||||
"path": "tests/golden/WBV2-P14-002/coverage-task-plan.json",
|
||||
"sha256": "952e36e6e78416fcaa63d9b437c1ec685d4a58c6a4783deea73f327003b3e7c7"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P14-002/task-context.json",
|
||||
"sha256": "b9e1b252ae6afa29d4b8cc95e56a1799d7f804bc203c5326f19403e8283e5d19"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"inventoryTotal": 6900,
|
||||
"inventoryPending": 6618,
|
||||
"capabilityBuckets": 15,
|
||||
"representativeEvidenceBuckets": 7,
|
||||
"unprovenPendingBuckets": 7,
|
||||
"activeUnprovenBuckets": 1,
|
||||
"engineBoundClaims": 8,
|
||||
"fullFamilyParityClaims": 0,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true,
|
||||
"deterministic": true,
|
||||
"historicalReproduction": false
|
||||
},
|
||||
"nextTask": "WBV2-P14-003"
|
||||
}
|
||||
174
tests/golden/WBV2-P14-002/task-context.json
Normal file
174
tests/golden/WBV2-P14-002/task-context.json
Normal file
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-002",
|
||||
"parentTask": "WBV2-P14-001",
|
||||
"status": "in_progress",
|
||||
"goal": "Reconcile capability-level evidence classes and representative slices from the coverage ledger.",
|
||||
"scope": {
|
||||
"gap": "workflow:reconcile_capability_evidence_matrix",
|
||||
"ownerFamily": "PARITY",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/generate-wbv2-capability-evidence-matrix.mjs --write",
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P14-002 --write"
|
||||
],
|
||||
"inputPaths": [],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2661,
|
||||
"contextRemainingTokens": 664
|
||||
},
|
||||
"source": {
|
||||
"bytes": 7243,
|
||||
"tokens": 1812
|
||||
},
|
||||
"selected": [],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-001/coverage-ledger-report.json",
|
||||
"bytes": 9767,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-001/inventory-coverage-ledger.json",
|
||||
"bytes": 2247265,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-001/manifest.json",
|
||||
"bytes": 0,
|
||||
"reason": "ALREADY_IN_CONTEXT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-002/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P14-002.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-002/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 0,
|
||||
"bytes": 0,
|
||||
"tokens": 0
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"only hash-bound claims are promoted",
|
||||
"partial capability coverage is explicit",
|
||||
"6900 remainder is unchanged"
|
||||
],
|
||||
"nextTask": "WBV2-P14-003",
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P14-002.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P14-001/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P14-001.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P14-002.md",
|
||||
"tests/golden/WBV2-P14-001/manifest.json",
|
||||
"docs/status/WBV2-P14-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-P14-001",
|
||||
"parentTask": "WBV2-P14-000",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P14-002",
|
||||
"artifactCount": 10
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P14-001 status",
|
||||
"- task: `WBV2-P14-001`; parent: `WBV2-P14-000`; status: `done`",
|
||||
"- inventory streamed: `6900` entries across `15` capability buckets",
|
||||
"- state: `281 completed`, `1 active`, `6618 pending`",
|
||||
"- representative-evidence buckets: `7`; unproven buckets: `8`",
|
||||
"- repeated Blender/Chromium validation: `0`; duplicate validation avoided: `true`",
|
||||
"- entry digest: `06debe05e086868dcad99980a04161f71172df23a27e36e14670da94af3db516`",
|
||||
"- nextTask: `WBV2-P14-002`"
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1241,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 35,
|
||||
"taskTokens": 311
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P14-002.md",
|
||||
"bytes": 1241,
|
||||
"lines": 35,
|
||||
"tokens": 311
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-001/manifest.json",
|
||||
"bytes": 2472,
|
||||
"lines": 69,
|
||||
"tokens": 618
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P14-001.md",
|
||||
"bytes": 727,
|
||||
"lines": 12,
|
||||
"tokens": 182
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1812,
|
||||
"evidenceFiles": 0,
|
||||
"evidenceBytes": 0,
|
||||
"evidenceTokens": 0,
|
||||
"totalTokens": 1812,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 2836,
|
||||
"serializedContextTokens": 630,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
169
tests/golden/WBV2-P14-003/batch-execution-strategy.json
Normal file
169
tests/golden/WBV2-P14-003/batch-execution-strategy.json
Normal file
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-003",
|
||||
"operation": "BATCH_EXECUTION_STRATEGY",
|
||||
"status": "READY",
|
||||
"input": {
|
||||
"matrix": "tests/golden/WBV2-P14-002/capability-evidence-matrix.json",
|
||||
"matrixSha256": "06a987b3911999c4c4983c89841318cd053ae30465ae83d49e6eeff566b462b8",
|
||||
"ledger": "tests/golden/WBV2-P14-001/inventory-coverage-ledger.json",
|
||||
"ledgerSha256": "d754efb8d3917fa2052d76d2753cb3fb65e42ed744649fb3d0c988908b1f955e"
|
||||
},
|
||||
"policy": {
|
||||
"oneCapabilityBatchPerBehavior": true,
|
||||
"representativeFirst": true,
|
||||
"fanoutOnlyOnUniqueBehavior": true,
|
||||
"repeatKeyIncludesSourceHash": true,
|
||||
"completedEntriesRegressionOnly": true,
|
||||
"pendingRemainderExplicit": true,
|
||||
"historicalBytesReadOnly": true,
|
||||
"browser": "chromium",
|
||||
"noFirefoxOrWebkit": true
|
||||
},
|
||||
"batches": [
|
||||
{
|
||||
"order": 1,
|
||||
"batch": "BATCH-UI_EDITOR",
|
||||
"capabilityId": "CAP-UI-EDITOR",
|
||||
"pendingEntries": 3930,
|
||||
"strategy": "BUILD_ONE_REPRESENTATIVE_FIXTURE_THEN_FANOUT",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 2,
|
||||
"batch": "BATCH-MEDIA_IO",
|
||||
"capabilityId": "CAP-MEDIA-IO",
|
||||
"pendingEntries": 566,
|
||||
"strategy": "BUILD_ONE_REPRESENTATIVE_FIXTURE_THEN_FANOUT",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 3,
|
||||
"batch": "BATCH-NODES_GRAPH",
|
||||
"capabilityId": "CAP-NODES-GRAPH",
|
||||
"pendingEntries": 543,
|
||||
"strategy": "REUSE_REPRESENTATIVE_THEN_FANOUT_BY_UNIQUE_BEHAVIOR",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 4,
|
||||
"batch": "BATCH-MESH_EDITING",
|
||||
"capabilityId": "CAP-MESH-EDITING",
|
||||
"pendingEntries": 431,
|
||||
"strategy": "REUSE_REPRESENTATIVE_THEN_FANOUT_BY_UNIQUE_BEHAVIOR",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 5,
|
||||
"batch": "BATCH-OBJECT_OPERATIONS",
|
||||
"capabilityId": "CAP-OBJECT-OPERATIONS",
|
||||
"pendingEntries": 316,
|
||||
"strategy": "BUILD_ONE_REPRESENTATIVE_FIXTURE_THEN_FANOUT",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 6,
|
||||
"batch": "BATCH-RIG_ANIMATION",
|
||||
"capabilityId": "CAP-RIG-ANIMATION",
|
||||
"pendingEntries": 224,
|
||||
"strategy": "REUSE_REPRESENTATIVE_THEN_FANOUT_BY_UNIQUE_BEHAVIOR",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 7,
|
||||
"batch": "BATCH-SIMULATION",
|
||||
"capabilityId": "CAP-SIMULATION",
|
||||
"pendingEntries": 155,
|
||||
"strategy": "BUILD_ONE_REPRESENTATIVE_FIXTURE_THEN_FANOUT",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 8,
|
||||
"batch": "BATCH-MATERIAL_RENDER",
|
||||
"capabilityId": "CAP-MATERIAL-RENDER",
|
||||
"pendingEntries": 125,
|
||||
"strategy": "REUSE_REPRESENTATIVE_THEN_FANOUT_BY_UNIQUE_BEHAVIOR",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 9,
|
||||
"batch": "BATCH-SCULPT_PAINT",
|
||||
"capabilityId": "CAP-SCULPT-PAINT",
|
||||
"pendingEntries": 117,
|
||||
"strategy": "BUILD_ONE_REPRESENTATIVE_FIXTURE_THEN_FANOUT",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 10,
|
||||
"batch": "BATCH-OTHER_OPERATOR",
|
||||
"capabilityId": "CAP-OTHER-OPERATOR",
|
||||
"pendingEntries": 103,
|
||||
"strategy": "BUILD_ONE_REPRESENTATIVE_FIXTURE_THEN_FANOUT",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 11,
|
||||
"batch": "BATCH-CORE_SCENE_GRAPH",
|
||||
"capabilityId": "CAP-CORE-SCENE-GRAPH",
|
||||
"pendingEntries": 57,
|
||||
"strategy": "REUSE_REPRESENTATIVE_THEN_FANOUT_BY_UNIQUE_BEHAVIOR",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 12,
|
||||
"batch": "BATCH-CORE_MESH",
|
||||
"capabilityId": "CAP-CORE-MESH",
|
||||
"pendingEntries": 30,
|
||||
"strategy": "BUILD_ONE_REPRESENTATIVE_FIXTURE_THEN_FANOUT",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 13,
|
||||
"batch": "BATCH-CORE_DNA_RNA",
|
||||
"capabilityId": "CAP-CORE-DNA-RNA",
|
||||
"pendingEntries": 20,
|
||||
"strategy": "BUILD_ONE_REPRESENTATIVE_FIXTURE_THEN_FANOUT",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 14,
|
||||
"batch": "BATCH-CORE_OBJECT",
|
||||
"capabilityId": "CAP-CORE-OBJECT",
|
||||
"pendingEntries": 1,
|
||||
"strategy": "REUSE_REPRESENTATIVE_THEN_FANOUT_BY_UNIQUE_BEHAVIOR",
|
||||
"minimumNewRuns": 1,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
},
|
||||
{
|
||||
"order": 15,
|
||||
"batch": "BATCH-MODIFIER_SYSTEM",
|
||||
"capabilityId": "CAP-MODIFIER-SYSTEM",
|
||||
"pendingEntries": 0,
|
||||
"strategy": "REGRESSION_ONLY",
|
||||
"minimumNewRuns": 0,
|
||||
"duplicateRule": "same repeatKey and source hash never rerun"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"inventory": 6900,
|
||||
"completed": 281,
|
||||
"active": 1,
|
||||
"pending": 6618,
|
||||
"capabilityBatches": 15,
|
||||
"minimumNewRunsIfAllBatchesExecuted": 14,
|
||||
"repeatedRuns": 0
|
||||
}
|
||||
}
|
||||
151
tests/golden/WBV2-P14-003/coverage-task-plan.json
Normal file
151
tests/golden/WBV2-P14-003/coverage-task-plan.json
Normal file
@@ -0,0 +1,151 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"planId": "BLENDER_WEB_PARITY_V2_INVENTORY_COVERAGE_EPOCH_1",
|
||||
"status": "COMPLETED_WITH_INVENTORY_COVERAGE_GATE",
|
||||
"authority": "queue_reactivated_after_p13_high_value_gate",
|
||||
"productContract": "docs/WEB_BLENDER_MODELER_V1_SCOPE.md",
|
||||
"sourcePlan": "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json",
|
||||
"executionPointer": "docs/EXECUTION_QUEUE.md",
|
||||
"runtimePolicy": {
|
||||
"blenderSource": "blender-5.2.0",
|
||||
"browserEvidence": [
|
||||
"chromium"
|
||||
],
|
||||
"forbiddenBrowsers": [
|
||||
"firefox",
|
||||
"webkit"
|
||||
],
|
||||
"mainAuthority": "blender_main",
|
||||
"reusePolicy": "existing_receipts_before_new_runs"
|
||||
},
|
||||
"coveragePolicy": {
|
||||
"inventoryTotal": 6900,
|
||||
"pendingAtStart": 6618,
|
||||
"grouping": "capability-family",
|
||||
"duplicateValidation": "forbidden",
|
||||
"historicalBytes": "read-only"
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"id": "WBV2-P14-000",
|
||||
"phase": "P14",
|
||||
"title": "authorize_inventory_coverage_continuation",
|
||||
"kind": "enabling",
|
||||
"owner": "PROGRAM",
|
||||
"dependsOn": [
|
||||
"WBV2-P13-005"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-governance",
|
||||
"gate": "G0",
|
||||
"card": "docs/tasks/WBV2-P14-000.md",
|
||||
"behavior": "Authorize a machine-readable 6900-entry coverage continuation without reopening completed production receipts.",
|
||||
"outputs": [
|
||||
"coverage root",
|
||||
"batch plan",
|
||||
"scope limits"
|
||||
],
|
||||
"acceptance": [
|
||||
"P13 evidence remains hash-bound",
|
||||
"inventory counts are deterministic",
|
||||
"one coverage task is active"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": true
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-001",
|
||||
"phase": "P14",
|
||||
"title": "generate_inventory_coverage_ledger",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-000"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-ledger",
|
||||
"gate": "G0",
|
||||
"card": "docs/tasks/WBV2-P14-001.md",
|
||||
"behavior": "Cluster all 6900 inventory entries by capability and bind representative evidence without repeated Blender or Chromium execution.",
|
||||
"outputs": [
|
||||
"coverage ledger",
|
||||
"capability counts",
|
||||
"batch digest"
|
||||
],
|
||||
"acceptance": [
|
||||
"all entries are accounted for",
|
||||
"pending remainder stays explicit",
|
||||
"existing receipts are reused",
|
||||
"no duplicate execution"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-002",
|
||||
"phase": "P14",
|
||||
"title": "reconcile_capability_evidence_matrix",
|
||||
"kind": "enabling",
|
||||
"owner": "PARITY",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-001"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-matrix",
|
||||
"gate": "G2",
|
||||
"card": "docs/tasks/WBV2-P14-002.md",
|
||||
"behavior": "Reconcile capability-level evidence classes and representative slices from the coverage ledger.",
|
||||
"outputs": [
|
||||
"evidence matrix",
|
||||
"claim map",
|
||||
"unproven map"
|
||||
],
|
||||
"acceptance": [
|
||||
"only hash-bound claims are promoted",
|
||||
"partial capability coverage is explicit",
|
||||
"6900 remainder is unchanged"
|
||||
],
|
||||
"status": "done",
|
||||
"ready": false,
|
||||
"queueMutationAllowed": false
|
||||
},
|
||||
{
|
||||
"id": "WBV2-P14-003",
|
||||
"phase": "P14",
|
||||
"title": "close_inventory_coverage_gate",
|
||||
"kind": "enabling",
|
||||
"owner": "RELEASE",
|
||||
"dependsOn": [
|
||||
"WBV2-P14-002"
|
||||
],
|
||||
"parityId": null,
|
||||
"implementationClass": "LOCAL_BOUNDED",
|
||||
"parallelGroup": "p14-release",
|
||||
"gate": "G5",
|
||||
"card": "docs/tasks/WBV2-P14-003.md",
|
||||
"behavior": "Close the coverage gate with a limited declaration and machine-checkable batching policy.",
|
||||
"outputs": [
|
||||
"coverage gate",
|
||||
"efficiency declaration",
|
||||
"next batch policy"
|
||||
],
|
||||
"acceptance": [
|
||||
"all entries have a capability bucket",
|
||||
"feature claims remain evidence-bound",
|
||||
"no historical or inventory over-claim"
|
||||
],
|
||||
"status": "in_progress",
|
||||
"ready": true,
|
||||
"queueMutationAllowed": false
|
||||
}
|
||||
],
|
||||
"parentRecoveryPlan": {
|
||||
"path": "tests/golden/WBV2-P14-002/coverage-task-plan.json",
|
||||
"sha256": "952e36e6e78416fcaa63d9b437c1ec685d4a58c6a4783deea73f327003b3e7c7"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-003",
|
||||
"operation": "CLOSE_INVENTORY_COVERAGE_GATE",
|
||||
"status": "PASS",
|
||||
"decision": {
|
||||
"status": "COVERAGE_ACCOUNTED_WITH_LIMITED_DECLARATION",
|
||||
"code": "INVENTORY_COVERAGE_BATCH_PLAN_READY",
|
||||
"inventoryTotal": 6900,
|
||||
"inventoryCompleted": 281,
|
||||
"inventoryActive": 1,
|
||||
"inventoryPending": 6618,
|
||||
"capabilityBuckets": 15,
|
||||
"representativeEvidenceBuckets": 7,
|
||||
"fullFamilyParityClaims": 0,
|
||||
"engineBoundFeatureClaims": 8,
|
||||
"provenanceEpoch": 2,
|
||||
"releaseScope": "AUTHORIZED_REBASELINE_ONLY",
|
||||
"fullHistoricalReproduction": false
|
||||
},
|
||||
"evidence": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P14-002/manifest.json",
|
||||
"sha256": "578894817d12e403b36039b46cbe60d9ded091f0b4de66adf5d76a4d2154e755"
|
||||
},
|
||||
"ledger": {
|
||||
"path": "tests/golden/WBV2-P14-001/inventory-coverage-ledger.json",
|
||||
"sha256": "d754efb8d3917fa2052d76d2753cb3fb65e42ed744649fb3d0c988908b1f955e",
|
||||
"entryDigest": "06debe05e086868dcad99980a04161f71172df23a27e36e14670da94af3db516"
|
||||
},
|
||||
"matrix": {
|
||||
"path": "tests/golden/WBV2-P14-002/capability-evidence-matrix.json",
|
||||
"sha256": "06a987b3911999c4c4983c89841318cd053ae30465ae83d49e6eeff566b462b8",
|
||||
"report": "tests/golden/WBV2-P14-002/capability-evidence-report.json",
|
||||
"reportSha256": "6460618e4aff0f12d65791e6f68f413bf13ce22fe7ea3cc935fd5f76101415da"
|
||||
},
|
||||
"p13Gate": {
|
||||
"path": "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json",
|
||||
"sha256": "a2b20da742909c7095a71046aa39fd6f4fe63896fd9e7ef5cc238e877956a446",
|
||||
"claims": 8
|
||||
}
|
||||
},
|
||||
"efficiency": {
|
||||
"oneFullInventoryScan": true,
|
||||
"existingReceiptsReused": true,
|
||||
"duplicateValidationAvoided": true,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"plannedCapabilityBatches": 15,
|
||||
"minimumNewRunsIfAllBatchesExecuted": 14
|
||||
},
|
||||
"policy": {
|
||||
"allEntriesBucketed": true,
|
||||
"onlyHashBoundClaims": true,
|
||||
"partialCoverageExplicit": true,
|
||||
"inventoryRemainderExplicit": true,
|
||||
"sourceHistoryReadOnly": true,
|
||||
"authorizedRebaselineOnly": true,
|
||||
"falseInventoryCompletion": "REJECTED",
|
||||
"falseHistoricalReproduction": "REJECTED",
|
||||
"nextWorkRule": "execute_one_unique_behavior_per_capability_batch"
|
||||
},
|
||||
"strategy": "tests/golden/WBV2-P14-003/batch-execution-strategy.json",
|
||||
"nextTask": null
|
||||
}
|
||||
76
tests/golden/WBV2-P14-003/manifest.json
Normal file
76
tests/golden/WBV2-P14-003/manifest.json
Normal file
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-003",
|
||||
"parentTask": "WBV2-P14-002",
|
||||
"operation": "CLOSE_INVENTORY_COVERAGE_GATE",
|
||||
"status": "done",
|
||||
"enablingTask": true,
|
||||
"parityStateChange": false,
|
||||
"runtime": "READ_ONLY_COVERAGE_GATE",
|
||||
"artifacts": {
|
||||
"parentManifest": {
|
||||
"path": "tests/golden/WBV2-P14-002/manifest.json",
|
||||
"sha256": "578894817d12e403b36039b46cbe60d9ded091f0b4de66adf5d76a4d2154e755"
|
||||
},
|
||||
"ledger": {
|
||||
"path": "tests/golden/WBV2-P14-001/inventory-coverage-ledger.json",
|
||||
"sha256": "d754efb8d3917fa2052d76d2753cb3fb65e42ed744649fb3d0c988908b1f955e"
|
||||
},
|
||||
"matrix": {
|
||||
"path": "tests/golden/WBV2-P14-002/capability-evidence-matrix.json",
|
||||
"sha256": "06a987b3911999c4c4983c89841318cd053ae30465ae83d49e6eeff566b462b8"
|
||||
},
|
||||
"matrixReport": {
|
||||
"path": "tests/golden/WBV2-P14-002/capability-evidence-report.json",
|
||||
"sha256": "6460618e4aff0f12d65791e6f68f413bf13ce22fe7ea3cc935fd5f76101415da"
|
||||
},
|
||||
"p13Gate": {
|
||||
"path": "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json",
|
||||
"sha256": "a2b20da742909c7095a71046aa39fd6f4fe63896fd9e7ef5cc238e877956a446"
|
||||
},
|
||||
"strategy": {
|
||||
"path": "tests/golden/WBV2-P14-003/batch-execution-strategy.json",
|
||||
"sha256": "1d3cf10b97e2ecb170a744ca6687601a64ad7ede1cc82dcbbc80b4291637122f"
|
||||
},
|
||||
"report": {
|
||||
"path": "tests/golden/WBV2-P14-003/inventory-coverage-gate-report.json",
|
||||
"sha256": "5ef8bec5dfe603452b04629709ca0e7f11b2ce4cec4a96af25f6c4b7634b64bd"
|
||||
},
|
||||
"generator": {
|
||||
"path": "tools/web/generate-wbv2-inventory-coverage-gate.mjs",
|
||||
"sha256": "ad1fde9bc82da4b6a28a99387a1990fbf2abfa6b90096d3e06267b65a0f9ceb0"
|
||||
},
|
||||
"status": {
|
||||
"path": "docs/status/WBV2-P14-003.md",
|
||||
"sha256": "94c256ec1654b4da2c674a6332f4b8d402dd257123d790f31016420f7114efc5"
|
||||
},
|
||||
"parityPlan": {
|
||||
"path": "tests/golden/WBV2-P14-003/coverage-task-plan.json",
|
||||
"sha256": "ea40e63b984c475c41b3a4ae8c3e8d8966c86a2574f0432839a2ff254660f3de"
|
||||
},
|
||||
"taskContext": {
|
||||
"path": "tests/golden/WBV2-P14-003/task-context.json",
|
||||
"sha256": "2f26d1a898a9edd0bc8ee89ad0393e4a3c2c904ee0975bfd40a8f14b8195224b"
|
||||
}
|
||||
},
|
||||
"assertions": {
|
||||
"inventoryTotal": 6900,
|
||||
"inventoryCompleted": 281,
|
||||
"inventoryActive": 1,
|
||||
"inventoryPending": 6618,
|
||||
"allEntriesBucketed": true,
|
||||
"capabilityBuckets": 15,
|
||||
"representativeEvidenceBuckets": 7,
|
||||
"fullFamilyParityClaims": 0,
|
||||
"engineBoundFeatureClaims": 8,
|
||||
"minimumNewRunsIfAllBatchesExecuted": 14,
|
||||
"repeatedBlenderRuns": 0,
|
||||
"repeatedChromiumRuns": 0,
|
||||
"duplicateValidationAvoided": true,
|
||||
"provenanceEpoch": 2,
|
||||
"authorizedRebaselineOnly": true,
|
||||
"fullHistoricalReproduction": false,
|
||||
"deterministic": true
|
||||
},
|
||||
"nextTask": null
|
||||
}
|
||||
177
tests/golden/WBV2-P14-003/task-context.json
Normal file
177
tests/golden/WBV2-P14-003/task-context.json
Normal file
@@ -0,0 +1,177 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"task": "WBV2-P14-003",
|
||||
"parentTask": "WBV2-P14-002",
|
||||
"status": "done",
|
||||
"goal": "Close the coverage gate with a limited declaration and machine-checkable batching policy.",
|
||||
"scope": {
|
||||
"gap": "workflow:close_inventory_coverage_gate",
|
||||
"ownerFamily": "RELEASE",
|
||||
"implementationClass": "LOCAL_BOUNDED"
|
||||
},
|
||||
"commands": [
|
||||
"node tools/web/generate-wbv2-inventory-coverage-gate.mjs --write",
|
||||
"node tools/web/check-task-context.mjs --task WBV2-P14-003 --write"
|
||||
],
|
||||
"inputPaths": [
|
||||
"tests/golden/WBV2-P14-002/capability-evidence-report.json"
|
||||
],
|
||||
"inputSelection": {
|
||||
"schemaVersion": 1,
|
||||
"limits": {
|
||||
"maxFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextRemainingBytes": 2543,
|
||||
"contextRemainingTokens": 634
|
||||
},
|
||||
"source": {
|
||||
"bytes": 7361,
|
||||
"tokens": 1842
|
||||
},
|
||||
"selected": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-002/capability-evidence-report.json",
|
||||
"bytes": 1219,
|
||||
"tokens": 305
|
||||
}
|
||||
],
|
||||
"excluded": [
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-002/capability-evidence-matrix.json",
|
||||
"bytes": 9752,
|
||||
"reason": "EVIDENCE_BYTE_BUDGET"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-002/manifest.json",
|
||||
"bytes": 0,
|
||||
"reason": "ALREADY_IN_CONTEXT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-003/",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P14-003.md",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-003/manifest.json",
|
||||
"bytes": null,
|
||||
"reason": "GENERATED_EVIDENCE_OUTPUT"
|
||||
}
|
||||
],
|
||||
"totals": {
|
||||
"files": 1,
|
||||
"bytes": 1219,
|
||||
"tokens": 305
|
||||
}
|
||||
},
|
||||
"exitCriteria": [
|
||||
"all entries have a capability bucket",
|
||||
"feature claims remain evidence-bound",
|
||||
"no historical or inventory over-claim"
|
||||
],
|
||||
"nextTask": null,
|
||||
"sourceDocuments": {
|
||||
"queue": "docs/EXECUTION_QUEUE.md",
|
||||
"taskCard": "docs/tasks/WBV2-P14-003.md",
|
||||
"taskIndex": "tests/golden/WBV2/task-index.json",
|
||||
"parentManifest": "tests/golden/WBV2-P14-002/manifest.json",
|
||||
"parentStatus": "docs/status/WBV2-P14-002.md"
|
||||
},
|
||||
"readPolicy": {
|
||||
"required": [
|
||||
"docs/EXECUTION_QUEUE.md",
|
||||
"docs/tasks/WBV2-P14-003.md",
|
||||
"tests/golden/WBV2-P14-002/manifest.json",
|
||||
"docs/status/WBV2-P14-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-P14-002",
|
||||
"parentTask": "WBV2-P14-001",
|
||||
"status": "done",
|
||||
"nextTask": "WBV2-P14-003",
|
||||
"artifactCount": 11
|
||||
},
|
||||
"statusSummary": [
|
||||
"# WBV2-P14-002 status",
|
||||
"- task: `WBV2-P14-002`; parent: `WBV2-P14-001`; status: `done`",
|
||||
"- capability buckets reconciled: `15`; inventory: `6900` total, `6618` pending",
|
||||
"- representative-evidence buckets: `7`; unproven pending buckets: `7`; active unproven: `1`",
|
||||
"- engine-bound claims referenced: `8`; full-family parity claims: `0`",
|
||||
"- repeated Blender/Chromium validation: `0`; duplicate validation avoided: `true`",
|
||||
"- nextTask: `WBV2-P14-003`",
|
||||
"This matrix binds the P14 coverage ledger to the eight P13 feature claims. Representative receipts remain partial slices; a capability family is not complete until each entry has its own evidence."
|
||||
]
|
||||
},
|
||||
"budgets": {
|
||||
"queueBytes": 4096,
|
||||
"taskBytes": 1211,
|
||||
"parentManifestBytes": 24576,
|
||||
"parentStatusBytes": 6144,
|
||||
"evidenceFiles": 12,
|
||||
"evidenceBytes": 8192,
|
||||
"contextTokens": 3500,
|
||||
"contextEnvelopeTokens": 1024,
|
||||
"taskLines": 35,
|
||||
"taskTokens": 303
|
||||
},
|
||||
"size": {
|
||||
"documents": [
|
||||
{
|
||||
"path": "docs/EXECUTION_QUEUE.md",
|
||||
"bytes": 2803,
|
||||
"lines": 51,
|
||||
"tokens": 701
|
||||
},
|
||||
{
|
||||
"path": "docs/tasks/WBV2-P14-003.md",
|
||||
"bytes": 1211,
|
||||
"lines": 35,
|
||||
"tokens": 303
|
||||
},
|
||||
{
|
||||
"path": "tests/golden/WBV2-P14-002/manifest.json",
|
||||
"bytes": 2713,
|
||||
"lines": 73,
|
||||
"tokens": 679
|
||||
},
|
||||
{
|
||||
"path": "docs/status/WBV2-P14-002.md",
|
||||
"bytes": 634,
|
||||
"lines": 11,
|
||||
"tokens": 159
|
||||
}
|
||||
],
|
||||
"sourceTokens": 1842,
|
||||
"evidenceFiles": 1,
|
||||
"evidenceBytes": 1219,
|
||||
"evidenceTokens": 305,
|
||||
"totalTokens": 2147,
|
||||
"reservedEnvelopeTokens": 1024,
|
||||
"estimatedContextTokens": 3171,
|
||||
"serializedContextTokens": 679,
|
||||
"withinBudget": true
|
||||
}
|
||||
}
|
||||
@@ -1,62 +1,4 @@
|
||||
{"id":"WBV2-P0-001","gapId":"workflow:reconcile_scope_and_checkpoints","ownerFamily":"PROGRAM","sourceTask":"P0","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["corrective owner-review status is explicit","legacy parent pointer is unchanged","plan has one activation gate"]}
|
||||
{"id":"WBV2-P0-002","gapId":"workflow:generate_blender52_inventory_and_parity_map","ownerFamily":"PARITY","sourceTask":"P0","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["unknown entries are classified","inventory is deterministic","no entry claims feature parity without evidence"]}
|
||||
{"id":"WBV2-P0-003","gapId":"workflow:freeze_capability_error_budget_contract","ownerFamily":"PROTOCOL","sourceTask":"P0","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["unsupported input fails closed","schema hashes are stable","migration policy preserves unknown data"]}
|
||||
{"id":"WBV2-P1-001","gapId":"workflow:stabilize_runtime_variants_and_source_receipts","ownerFamily":"RUNTIME","sourceTask":"P1","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["variant fallback is deterministic","source/build hash is verified","one engine session has one generation"]}
|
||||
{"id":"WBV2-P1-002","gapId":"workflow:unify_sceneir_stable_ids_and_binary_deltas","ownerFamily":"MAIN","sourceTask":"P1","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["IDs survive save/reopen","malformed chunk is rejected","desktop and WASM canonical hashes match"]}
|
||||
{"id":"WBV2-P1-003","gapId":"workflow:unify_main_transaction_history_and_save","ownerFamily":"MAIN","sourceTask":"P1","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["failed/no-op commands add no history","stale revision cannot commit","reopen state is byte/hash stable"]}
|
||||
{"id":"WBV2-P1-004","gapId":"workflow:harden_worker_cancel_restart_and_dispose","ownerFamily":"RUNTIME","sourceTask":"P1","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["cancel never publishes result","generation mismatch is rejected","CPU/WASM/GPU owners return to budget"]}
|
||||
{"id":"WBV2-P1-005","gapId":"workflow:harden_opfs_indexeddb_journal_recovery","ownerFamily":"STORAGE","sourceTask":"P1","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["interrupted commit leaves old project usable","hash mismatch quarantines payload","small project recovers after restart"]}
|
||||
{"id":"WBV2-P2-001","gapId":"EDITOR.OPEN_SCENE","ownerFamily":"EDITOR","sourceTask":"P2","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["stable IDs and selection revision match","missing data is structured","reopen preserves context"]}
|
||||
{"id":"WBV2-P2-002","gapId":"OBJECT.TRANSFORM_HIERARCHY","ownerFamily":"EDITOR","sourceTask":"P2","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["world matrix parity","cycle/locked/library edits reject","undo/redo/save/reopen stable"]}
|
||||
{"id":"WBV2-P2-003","gapId":"MESH.EDIT_CORE","ownerFamily":"MESH","sourceTask":"P2","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["topology/attributes match","invalid selection and budget fail closed","single transaction and reopen stable"]}
|
||||
{"id":"WBV2-P2-004","gapId":"VIEWPORT.MAIN_OFFSCREEN","ownerFamily":"VIEWPORT","sourceTask":"P2","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["both paths have nonblank pixels","selection/camera revision is shared","device loss releases resources"]}
|
||||
{"id":"WBV2-P2-005","gapId":"WORKFLOW.P0_USER_LOOP","ownerFamily":"INTEGRATION","sourceTask":"P2","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["Main revision and exported asset are bound","fault/cancel leaves old state","Chromium production path passes"]}
|
||||
{"id":"WBV2-P3-001","gapId":"MATERIAL.PBR_UV","ownerFamily":"MATERIAL","sourceTask":"P3","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["desktop/WASM node fields match","unsupported node retained/blocked","packed asset survives reopen"]}
|
||||
{"id":"WBV2-P3-002","gapId":"ANIMATION.TRS_ACTION","ownerFamily":"ANIMATION","sourceTask":"P3","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["sampled values and handles match","stale frame result rejected","undo/save/reopen stable"]}
|
||||
{"id":"WBV2-P3-003","gapId":"RIG.POSE_SKIN","ownerFamily":"RIG","sourceTask":"P3","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["pose matrices and weights match","unsupported constraint is explicit","save/reopen and small recovery pass"]}
|
||||
{"id":"WBV2-P3-004","gapId":"IO.GLB_ROUNDTRIP","ownerFamily":"IO","sourceTask":"P3","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["roundtrip canonical graph matches","sparse/external URI/budget negatives reject","no silent loss"]}
|
||||
{"id":"WBV2-P3-005","gapId":"ASSET.LIBRARY_OPERATIONS","ownerFamily":"ASSET","sourceTask":"P3","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["source/hash/owner identity preserved","linked mutation blocked","stale generation and missing source fail closed"]}
|
||||
{"id":"WBV2-P4-001","gapId":"MODIFIER.DECLARED_SLICES","ownerFamily":"MODIFIER","sourceTask":"P4","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["desktop/evaluated Main match","unknown modifier retained and blocked","apply/undo/save/reopen stable"]}
|
||||
{"id":"WBV2-P4-002","gapId":"NODES.ALLOWLIST","ownerFamily":"NODES","sourceTask":"P4","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["node/socket/link/default parity","budget and unknown-node block before commit","compile failure rolls back"]}
|
||||
{"id":"WBV2-P4-003","gapId":"SCULPT.NONMESH.PAINT_BOUNDED","ownerFamily":"SCULPT","sourceTask":"P4","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["Main commit is atomic","unsupported brush/solver returns stable code","GPU/OOM/restart recovery passes"]}
|
||||
{"id":"WBV2-P4-004","gapId":"SIMULATION.CACHE_LIFECYCLE","ownerFamily":"SIMULATION","sourceTask":"P4","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["stale/corrupt cache never publishes","small cache recovers after restart","budget release is observable"]}
|
||||
{"id":"WBV2-P5-001","gapId":"RENDER.ROUTING","ownerFamily":"RENDER","sourceTask":"P5","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["source/settings/build identity bound","unsupported route cannot pretend local success","cancel/device loss releases resources"]}
|
||||
{"id":"WBV2-P5-002","gapId":"MEDIA.BOUNDED_WORKFLOW","ownerFamily":"MEDIA","sourceTask":"P5","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["seek/decode revision ordering","cancel/timeout does not publish","quota/OOM/restart leaves project valid"]}
|
||||
{"id":"WBV2-P5-003","gapId":"SERVER.JOB_BINDING","ownerFamily":"SERVER","sourceTask":"P5","state":"completed","targetImplementationClass":"SERVER_EXACT","exitCriteria":["duplicate request is idempotent","stale result cannot bind","timeout/cancel/OOM produces no READY output"]}
|
||||
{"id":"WBV2-P6-001","gapId":"SECURITY.SCRIPTING","ownerFamily":"SECURITY","sourceTask":"P6","state":"completed","targetImplementationClass":"EXCLUDED","exitCriteria":["autorun/network/add-on defaults deny","sandbox cancellation/dispose works","no secret or filesystem escape"]}
|
||||
{"id":"WBV2-P6-002","gapId":"workflow:performance_fault_and_recovery_matrix","ownerFamily":"RELIABILITY","sourceTask":"P6","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["100k/1M/10M thresholds recorded","fault leaves old revision usable","all owned resources return to budget"]}
|
||||
{"id":"WBV2-P6-003","gapId":"workflow:offline_ci_sbom_and_rollback_release","ownerFamily":"RELEASE","sourceTask":"P6","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["quick/Chromium/release lanes pass","artifact hashes reproduce","upgrade/rollback and known limitations are tested"]}
|
||||
{"id":"WBV2-P7-001","gapId":"workflow:cluster_full_blender_gap_inventory","ownerFamily":"PARITY","sourceTask":"P7","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["each gap has stable ID and owner","negative-only/unsupported is not positive parity","clusters are deterministic"]}
|
||||
{"id":"WBV2-P7-002","gapId":"workflow:generate_atomic_family_gap_queue","ownerFamily":"PROGRAM","sourceTask":"P7","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["one active ready task","no guessed successor","each card fits context budget"]}
|
||||
{"id":"WBV2-P7-003","gapId":"workflow:full_parity_candidate_release_gate","ownerFamily":"RELEASE","sourceTask":"P7","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["all claims bind to evidence","blocked/excluded/server classes remain explicit","queue and protected hashes pass"]}
|
||||
{"id":"WBV2-P8-000","gapId":"workflow:authorize_recovery_capability_root","ownerFamily":"PROGRAM","sourceTask":"P8","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["P7 evidence remains hash exact","recovery scope is explicit","one recovery task is active"]}
|
||||
{"id":"WBV2-P8-001","gapId":"workflow:rebaseline_mutable_inventories","ownerFamily":"PROGRAM","sourceTask":"P8","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["only expected mutable hashes drift","dependency closure is unchanged","historical manifests remain unmodified"]}
|
||||
{"id":"WBV2-P8-002","gapId":"workflow:close_atomic_chromium_receipts","ownerFamily":"PARITY","sourceTask":"P8","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["45 receipts are manifest-bound","desktop/WASM/save-reopen behaviors are explicit","Chromium is the only browser"]}
|
||||
{"id":"WBV2-P8-003","gapId":"workflow:authorize_m12_provenance_epoch","ownerFamily":"PROGRAM","sourceTask":"P8","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["22 restored originals stay exact","62 unavailable entries are not called restored","all replacements are hash-bound"]}
|
||||
{"id":"WBV2-P8-004","gapId":"workflow:recompute_recovery_release_gate","ownerFamily":"RELEASE","sourceTask":"P8","state":"pending","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["all receipts bind to manifests","provenance epoch is explicit","all governance gates pass"]}
|
||||
{"id":"WBV2-P9-000","gapId":"workflow:authorize_feature_parity_continuation","ownerFamily":"PROGRAM","sourceTask":"P9","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["P8 provenance evidence remains exact","authorized baseline is explicit","one feature task is active"]}
|
||||
{"id":"WBV2-P9-001","gapId":"CAP-MESH-POSITIVE-EDIT","ownerFamily":"MESH","sourceTask":"P9","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["real meshTranslateVertex command passes","desktop/WASM delta matches","save/reopen is exact","malformed/stale/unknown inputs fail closed"]}
|
||||
{"id":"WBV2-P9-002","gapId":"CAP-MODIFIER-STATE-MUTATION","ownerFamily":"MODIFIER","sourceTask":"P9","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["real modifierSetEnabled command passes","desktop/WASM delta matches","save/reopen is exact"]}
|
||||
{"id":"WBV2-P9-003","gapId":"CAP-ASSET-CATALOG-MUTATION","ownerFamily":"ASSET","sourceTask":"P9","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["real assetCatalogAppend command passes","resource hash is bound","save/reopen is exact"]}
|
||||
{"id":"WBV2-P9-004","gapId":"workflow:recompute_feature_parity_gate","ownerFamily":"RELEASE","sourceTask":"P9","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["only evidenced feature claims are emitted","authorized baseline remains explicit","full historical reproduction remains false"]}
|
||||
{"id":"WBV2-P10-000","gapId":"workflow:authorize_native_engine_parity_continuation","ownerFamily":"PROGRAM","sourceTask":"P10","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["P9 evidence remains hash-bound","native build/runtime is explicit","one native parity task is active"]}
|
||||
{"id":"WBV2-P10-001","gapId":"workflow:reconcile_wbv2_inventory_source_drift","ownerFamily":"PARITY","sourceTask":"P10","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["historical P0 hashes remain unchanged","only authorized plan drift is recorded","dependency roots/lockfile/closure remain stable","inventory checker passes using current baseline"]}
|
||||
{"id":"WBV2-P10-002","gapId":"ENGINE.NATIVE_WASM_BRIDGE","ownerFamily":"ENGINE","sourceTask":"P10","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["native Blender binary is source-bound","WASM binary and JS are hash-bound","same mutation reaches real engine/Main","save/reopen and failures remain exact"]}
|
||||
{"id":"WBV2-P10-003","gapId":"CORE.MODULE_MATRIX","ownerFamily":"PARITY","sourceTask":"P10","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["positive cases are L2+","negative cases do not mutate Main","shards use one catalog hash","unmapped and retained-negative cases stay explicit"]}
|
||||
{"id":"WBV2-P11-000","gapId":"workflow:authorize_module_expansion_continuation","ownerFamily":"PROGRAM","sourceTask":"P11","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["P10 evidence remains hash-bound","one expansion task is active","full historical reproduction remains false"]}
|
||||
{"id":"WBV2-P11-001","gapId":"MESH.EDIT_TOPOLOGY_FAMILY","ownerFamily":"MESH","sourceTask":"P11","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["six mesh operations mutate Main","revision increments exactly once","save/reopen preserves topology counts","invalid selection and incompatible configuration fail closed"]}
|
||||
{"id":"WBV2-P11-002","gapId":"MODIFIER.PARAMETER_APPLY_FAMILY","ownerFamily":"MODIFIER","sourceTask":"P11","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["parameter mutation is native/WASM bound","apply result is evaluated","save/reopen is exact","dependency and stale inputs fail closed"]}
|
||||
{"id":"WBV2-P11-003","gapId":"ASSET.LINK_OVERRIDE_RELOAD_FAMILY","ownerFamily":"ASSET","sourceTask":"P11","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["source ownership is preserved","override is local and hash-bound","reload revision is checked","missing source remains explicit"]}
|
||||
{"id":"WBV2-P11-004","gapId":"workflow:recompute_engine_module_gate","ownerFamily":"RELEASE","sourceTask":"P11","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["only engine-bound claims are emitted","inventory remainder is explicit","provenance epoch 2 remains authorized rebaseline only","full historical reproduction remains false"]}
|
||||
{"id":"WBV2-P12-000","gapId":"workflow:authorize_domain_expansion_continuation","ownerFamily":"PROGRAM","sourceTask":"P12","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["P11 evidence remains hash-bound","domain tasks use existing source receipts","one ledger task is active"]}
|
||||
{"id":"WBV2-P12-001","gapId":"workflow:reconcile_existing_capability_ledger","ownerFamily":"PARITY","sourceTask":"P12","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["all source manifests are hash-verified","only done receipts enter proven evidence","L0/metadata and blocked cases remain explicit","inventory remainder is preserved"]}
|
||||
{"id":"WBV2-P12-002","gapId":"EDITOR.SCENE_OBJECT_ENGINE","ownerFamily":"EDITOR","sourceTask":"P12","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["visibility and transform mutate Main","desktop source oracle is bound","save/reopen is exact","stale and malformed commands fail closed"]}
|
||||
{"id":"WBV2-P12-003","gapId":"AUTHORING.MATERIAL_ANIMATION_ENGINE","ownerFamily":"AUTHORING","sourceTask":"P12","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["material and keyframe Main mutations pass","source hashes are bound","save/reopen is exact","unsupported graph and stale frame inputs fail closed"]}
|
||||
{"id":"WBV2-P12-004","gapId":"VIEWPORT.NONMESH_ENGINE","ownerFamily":"VIEWPORT","sourceTask":"P12","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["nonblank viewport evidence is bound","non-mesh data is explicit","unsupported and budget cases fail closed","save/reopen and resource disposal are exact"]}
|
||||
{"id":"WBV2-P12-005","gapId":"workflow:recompute_domain_parity_gate","ownerFamily":"RELEASE","sourceTask":"P12","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["only engine-bound domain claims are emitted","unproven inventory remains explicit","epoch 2 remains authorized rebaseline only","full historical reproduction remains false"]}
|
||||
{"id":"WBV2-P13-000","gapId":"workflow:authorize_high_value_domain_continuation","ownerFamily":"PROGRAM","sourceTask":"P13","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["P12 evidence remains hash-bound","existing advanced receipts are reusable","one ledger task is active"]}
|
||||
{"id":"WBV2-P13-001","gapId":"workflow:reconcile_advanced_domain_ledger","ownerFamily":"PARITY","sourceTask":"P13","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["source manifests are hash-verified","existing reports are classified conservatively","no repeated Blender/Chromium run","unproven advanced domains stay explicit"]}
|
||||
{"id":"WBV2-P13-002","gapId":"NODES.GEOMETRY_ENGINE","ownerFamily":"NODES","sourceTask":"P13","state":"completed","targetImplementationClass":"LOCAL_EXACT","exitCriteria":["graph hashes are stable","unsupported nodes remain explicit","save/reopen is exact","malformed graph and budget cases fail closed"]}
|
||||
{"id":"WBV2-P13-003","gapId":"RIG.POSE_ENGINE","ownerFamily":"RIG","sourceTask":"P13","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["stable bone IDs and matrices are preserved","unsupported constraint is explicit","save/reopen is exact","malformed pose input fails closed"]}
|
||||
{"id":"WBV2-P13-004","gapId":"ADVANCED.SIMULATION_RENDER_MEDIA","ownerFamily":"ADVANCED","sourceTask":"P13","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["existing exact reports are reused","unsupported routes remain explicit","hash and lifecycle states are bound","no false local parity claim"]}
|
||||
{"id":"WBV2-P13-005","gapId":"workflow:recompute_high_value_domain_gate","ownerFamily":"RELEASE","sourceTask":"P13","state":"active","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["only evidenced claims are emitted","inventory remainder stays explicit","provenance limitation stays explicit","full historical reproduction remains false"]}
|
||||
{"id":"WBV2-P14-000","gapId":"workflow:authorize_inventory_coverage_continuation","ownerFamily":"PROGRAM","sourceTask":"P14","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["P13 evidence remains hash-bound","inventory counts are deterministic","one coverage task is active"]}
|
||||
{"id":"WBV2-P14-001","gapId":"workflow:generate_inventory_coverage_ledger","ownerFamily":"PARITY","sourceTask":"P14","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["all entries are accounted for","pending remainder stays explicit","existing receipts are reused","no duplicate execution"]}
|
||||
{"id":"WBV2-P14-002","gapId":"workflow:reconcile_capability_evidence_matrix","ownerFamily":"PARITY","sourceTask":"P14","state":"completed","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["only hash-bound claims are promoted","partial capability coverage is explicit","6900 remainder is unchanged"]}
|
||||
{"id":"WBV2-P14-003","gapId":"workflow:close_inventory_coverage_gate","ownerFamily":"RELEASE","sourceTask":"P14","state":"active","targetImplementationClass":"LOCAL_BOUNDED","exitCriteria":["all entries have a capability bucket","feature claims remain evidence-bound","no historical or inventory over-claim"]}
|
||||
|
||||
File diff suppressed because one or more lines are too long
53
tools/web/generate-wbv2-capability-evidence-matrix.mjs
Normal file
53
tools/web/generate-wbv2-capability-evidence-matrix.mjs
Normal file
@@ -0,0 +1,53 @@
|
||||
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 write = process.argv.includes("--write");
|
||||
const absolute = (file) => path.join(root, file);
|
||||
const read = (file) => fs.readFileSync(absolute(file), "utf8");
|
||||
const json = (file) => JSON.parse(read(file));
|
||||
const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(absolute(file))).digest("hex");
|
||||
const outputRoot = "tests/golden/WBV2-P14-002";
|
||||
const matrixPath = `${outputRoot}/capability-evidence-matrix.json`;
|
||||
const reportPath = `${outputRoot}/capability-evidence-report.json`;
|
||||
const statusPath = "docs/status/WBV2-P14-002.md";
|
||||
const planPath = `${outputRoot}/coverage-task-plan.json`;
|
||||
const manifestPath = `${outputRoot}/manifest.json`;
|
||||
const parentPath = "tests/golden/WBV2-P14-001/manifest.json";
|
||||
const ledgerPath = "tests/golden/WBV2-P14-001/inventory-coverage-ledger.json";
|
||||
const ledgerReportPath = "tests/golden/WBV2-P14-001/coverage-ledger-report.json";
|
||||
const gatePath = "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json";
|
||||
const matrixTemplatePath = "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json";
|
||||
|
||||
const parent = json(parentPath);
|
||||
assert.equal(parent.task, "WBV2-P14-001"); assert.equal(parent.status, "done"); assert.equal(parent.nextTask, "WBV2-P14-002");
|
||||
for (const artifact of Object.values(parent.artifacts ?? {})) assert.equal(sha256(artifact.path), artifact.sha256, artifact.path);
|
||||
const ledger = json(ledgerPath); const ledgerReport = json(ledgerReportPath); const gate = json(gatePath);
|
||||
assert.equal(ledger.status, "READY"); assert.equal(ledger.inventory.total, 6900); assert.equal(ledger.inventory.pending, 6618); assert.equal(ledger.buckets.length, 15);
|
||||
assert.equal(ledgerReport.status, "PASS"); assert.equal(ledgerReport.ledgerSha256, sha256(ledgerPath)); assert.equal(gate.status, "PASS");
|
||||
assert.equal(gate.decision.featureParityClaimCount, 8); assert.equal(gate.decision.fullHistoricalReproduction, false);
|
||||
const claimSet = new Set(gate.decision.featureParityClaims);
|
||||
|
||||
const entries = ledger.buckets.map((bucket) => {
|
||||
const claims = bucket.representativeEvidence?.claims ?? [];
|
||||
for (const claim of claims) assert(claimSet.has(claim), `${bucket.capabilityId} references undeclared claim ${claim}`);
|
||||
const complete = bucket.completed ?? 0; const pending = bucket.pending ?? 0; const active = bucket.active ?? 0;
|
||||
const evidenceClass = claims.length > 0 ? "PARTIAL_REPRESENTATIVE" : active > 0 ? "ACTIVE_UNPROVEN" : pending > 0 ? "UNPROVEN_PENDING" : "LEGACY_COMPLETED_NO_ENGINE_CLAIM";
|
||||
return { capabilityId: bucket.capabilityId, family: bucket.family, layer: bucket.layer, total: bucket.total, completed: complete, pending, active, evidenceClass, representativeClaims: claims, representativeEvidence: bucket.representativeEvidence?.evidence ?? "no engine-bound receipt", sourceTasks: bucket.sourceTasks, kinds: bucket.kinds, fullFamilyParity: false, inventoryRemainderExplicit: true };
|
||||
}).sort((a, b) => a.capabilityId.localeCompare(b.capabilityId));
|
||||
assert.equal(entries.reduce((sum, entry) => sum + entry.total, 0), 6900); assert.equal(entries.reduce((sum, entry) => sum + entry.pending, 0), 6618); assert.equal(entries.filter((entry) => entry.evidenceClass === "PARTIAL_REPRESENTATIVE").length, 7);
|
||||
const matrix = { schemaVersion: 1, task: "WBV2-P14-002", operation: "CAPABILITY_EVIDENCE_MATRIX_RECONCILIATION", status: "READY", source: { ledger: ledgerPath, ledgerSha256: sha256(ledgerPath), ledgerReport: ledgerReportPath, ledgerReportSha256: sha256(ledgerReportPath), highValueGate: gatePath, highValueGateSha256: sha256(gatePath), template: matrixTemplatePath, templateSha256: sha256(matrixTemplatePath) }, policy: { representativeClaimsDoNotCloseFamily: true, fullFamilyParityRequiresEntryEvidence: true, inventoryRemainderExplicit: true, historicalBytesReadOnly: true, duplicateValidationAvoided: true }, inventory: { total: 6900, completed: 281, active: 1, pending: 6618, buckets: 15 }, entries };
|
||||
const report = { schemaVersion: 1, task: "WBV2-P14-002", operation: "RECONCILE_CAPABILITY_EVIDENCE_MATRIX", status: "PASS", matrixSha256: "PENDING", inventory: matrix.inventory, evidenceClasses: { partialRepresentative: entries.filter((entry) => entry.evidenceClass === "PARTIAL_REPRESENTATIVE").length, unprovenPending: entries.filter((entry) => entry.evidenceClass === "UNPROVEN_PENDING").length, activeUnproven: entries.filter((entry) => entry.evidenceClass === "ACTIVE_UNPROVEN").length, legacyCompletedNoEngineClaim: entries.filter((entry) => entry.evidenceClass === "LEGACY_COMPLETED_NO_ENGINE_CLAIM").length }, featureClaims: [...claimSet], efficiency: { oneLedgerInput: true, existingReceiptsReused: true, repeatedBlenderRuns: 0, repeatedChromiumRuns: 0, duplicateValidationAvoided: true }, policy: matrix.policy, nextTask: "WBV2-P14-003" };
|
||||
if (!write) { process.stdout.write(`wbv2-capability-evidence-matrix-ok task=WBV2-P14-002 buckets=15 partial=${report.evidenceClasses.partialRepresentative} pending=6618 claims=8 repeatedRuns=0 next=WBV2-P14-003\n`); process.exit(0); }
|
||||
fs.mkdirSync(absolute(outputRoot), { recursive: true }); fs.writeFileSync(absolute(matrixPath), `${JSON.stringify(matrix, null, 2)}\n`); report.matrixSha256 = sha256(matrixPath); fs.writeFileSync(absolute(reportPath), `${JSON.stringify(report, null, 2)}\n`);
|
||||
fs.writeFileSync(absolute(statusPath), `# WBV2-P14-002 status\n\n- task: \`WBV2-P14-002\`; parent: \`WBV2-P14-001\`; status: \`done\`\n- capability buckets reconciled: \`15\`; inventory: \`6900\` total, \`6618\` pending\n- representative-evidence buckets: \`${report.evidenceClasses.partialRepresentative}\`; unproven pending buckets: \`${report.evidenceClasses.unprovenPending}\`; active unproven: \`${report.evidenceClasses.activeUnproven}\`\n- engine-bound claims referenced: \`${claimSet.size}\`; full-family parity claims: \`0\`\n- repeated Blender/Chromium validation: \`0\`; duplicate validation avoided: \`true\`\n- nextTask: \`WBV2-P14-003\`\n\nThis matrix binds the P14 coverage ledger to the eight P13 feature claims. Representative receipts remain partial slices; a capability family is not complete until each entry has its own evidence.\n`);
|
||||
const previousPlan = json("tests/golden/WBV2-P14-001/coverage-task-plan.json"); const nextPlan = structuredClone(previousPlan); nextPlan.parentRecoveryPlan = { path: "tests/golden/WBV2-P14-001/coverage-task-plan.json", sha256: sha256("tests/golden/WBV2-P14-001/coverage-task-plan.json") }; nextPlan.tasks = nextPlan.tasks.map((task) => task.id === "WBV2-P14-002" ? { ...task, status: "done", ready: false } : task.id === "WBV2-P14-003" ? { ...task, status: "in_progress", ready: true } : { ...task, ready: false }); fs.writeFileSync(absolute(planPath), `${JSON.stringify(nextPlan, null, 2)}\n`);
|
||||
fs.writeFileSync(absolute("docs/tasks/WBV2-P14-003.md"), read("docs/tasks/WBV2-P14-003.md").replace("- status: planned", "- status: in_progress")); execFileSync(process.execPath, [absolute("tools/web/generate-v2-task-index.mjs"), "--plan-path", absolute(planPath)], { cwd: root, stdio: "inherit" }); execFileSync(process.execPath, [absolute("tools/web/check-task-context.mjs"), "--task", "WBV2-P14-002", "--write"], { cwd: root, stdio: "inherit" });
|
||||
const artifactPaths = { parentManifest: parentPath, ledger: ledgerPath, ledgerReport: ledgerReportPath, highValueGate: gatePath, matrixTemplate: matrixTemplatePath, matrix: matrixPath, report: reportPath, generator: "tools/web/generate-wbv2-capability-evidence-matrix.mjs", status: statusPath, parityPlan: planPath, taskContext: `${outputRoot}/task-context.json` }; const artifacts = Object.fromEntries(Object.entries(artifactPaths).map(([name, file]) => [name, { path: file, sha256: sha256(file) }])); const manifest = { schemaVersion: 1, task: "WBV2-P14-002", parentTask: "WBV2-P14-001", operation: "RECONCILE_CAPABILITY_EVIDENCE_MATRIX", status: "done", enablingTask: true, parityStateChange: false, runtime: "READ_ONLY_CAPABILITY_EVIDENCE_RECONCILIATION", artifacts, assertions: { inventoryTotal: 6900, inventoryPending: 6618, capabilityBuckets: 15, representativeEvidenceBuckets: report.evidenceClasses.partialRepresentative, unprovenPendingBuckets: report.evidenceClasses.unprovenPending, activeUnprovenBuckets: report.evidenceClasses.activeUnproven, engineBoundClaims: claimSet.size, fullFamilyParityClaims: 0, repeatedBlenderRuns: 0, repeatedChromiumRuns: 0, duplicateValidationAvoided: true, deterministic: true, historicalReproduction: false }, nextTask: "WBV2-P14-003" }; fs.writeFileSync(absolute(manifestPath), `${JSON.stringify(manifest, null, 2)}\n`);
|
||||
let queue = read("docs/EXECUTION_QUEUE.md"); queue = queue.replace(/\| 当前任务 \| `[^`]+` \|/u, "| 当前任务 | `WBV2-P14-003` |").replace(/\| parent manifest \| `[^`]+` \|/u, "| parent manifest | `tests/golden/WBV2-P14-002/manifest.json` |").replace(/\| 任务卡 \| \[[^\]]+\]\([^\)]+\) \|/u, "| 任务卡 | [`tasks/WBV2-P14-003.md`](tasks/WBV2-P14-003.md) |"); fs.writeFileSync(absolute("docs/EXECUTION_QUEUE.md"), queue);
|
||||
let nextTaskFile = read("nextTask.md"); nextTaskFile = nextTaskFile.replace(/\| Current task when this file was written \| `[^`]+` \|/u, "| Current task when this file was written | `WBV2-P14-003` |").replace(/\| Current task state \| `[^`]+` \|/u, "| Current task state | `in_progress` |").replace(/\| Parent manifest \| `[^`]+` \|/u, "| Parent manifest | `tests/golden/WBV2-P14-002/manifest.json` |").replace(/\| Current task card \| `[^`]+` \|/u, "| Current task card | `docs/tasks/WBV2-P14-003.md` |").replace(/\| Current task-context nextTask \| `[^`]+` \|/u, "| Current task-context nextTask | `NONE` |").replace(/\| Focused command \| `[^`]+` \|/u, "| Focused command | `node tools/web/generate-wbv2-inventory-coverage-gate.mjs --write` |"); fs.writeFileSync(absolute("nextTask.md"), nextTaskFile);
|
||||
process.stdout.write(`wbv2-capability-evidence-matrix-written task=WBV2-P14-002 buckets=15 partial=${report.evidenceClasses.partialRepresentative} pending=6618 claims=8 repeatedRuns=0 next=WBV2-P14-003 artifacts=${Object.keys(artifacts).length}\n`);
|
||||
91
tools/web/generate-wbv2-coverage-ledger.mjs
Normal file
91
tools/web/generate-wbv2-coverage-ledger.mjs
Normal file
@@ -0,0 +1,91 @@
|
||||
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 write = process.argv.includes("--write");
|
||||
const absolute = (file) => path.join(root, file);
|
||||
const read = (file) => fs.readFileSync(absolute(file), "utf8");
|
||||
const json = (file) => JSON.parse(read(file));
|
||||
const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(absolute(file))).digest("hex");
|
||||
const outputRoot = "tests/golden/WBV2-P14-001";
|
||||
const ledgerPath = `${outputRoot}/inventory-coverage-ledger.json`;
|
||||
const reportPath = `${outputRoot}/coverage-ledger-report.json`;
|
||||
const matrixPath = `${outputRoot}/capability-batch-summary.json`;
|
||||
const statusPath = "docs/status/WBV2-P14-001.md";
|
||||
const planPath = `${outputRoot}/coverage-task-plan.json`;
|
||||
const manifestPath = `${outputRoot}/manifest.json`;
|
||||
const parentPath = "tests/golden/WBV2-P14-000/manifest.json";
|
||||
const inventoryPath = "tests/golden/WBV2-P0-002/parity-map.json";
|
||||
const p13Path = "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json";
|
||||
|
||||
const parent = json(parentPath);
|
||||
assert.equal(parent.task, "WBV2-P14-000");
|
||||
assert.equal(parent.status, "done");
|
||||
assert.equal(parent.nextTask, "WBV2-P14-001");
|
||||
for (const artifact of Object.values(parent.artifacts ?? {})) assert.equal(sha256(artifact.path), artifact.sha256, artifact.path);
|
||||
const inventory = json(inventoryPath);
|
||||
const p13 = json(p13Path);
|
||||
assert.equal(inventory.summary.inventoryEntries, 6900);
|
||||
assert.equal(inventory.summary.pendingLegacyEntries, 6618);
|
||||
assert.equal(inventory.summary.capabilityCount, 15);
|
||||
assert.equal(p13.status, "PASS");
|
||||
assert.equal(p13.decision.inventoryPending, 6618);
|
||||
assert.equal(p13.decision.fullHistoricalReproduction, false);
|
||||
|
||||
const claimMap = new Map([
|
||||
["CAP-CORE-OBJECT", { claims: ["CAP-SCENE-OBJECT-ENGINE"], mode: "REPRESENTATIVE_SLICE", evidence: "scene/object visibility and transform" }],
|
||||
["CAP-CORE-SCENE-GRAPH", { claims: ["CAP-SCENE-OBJECT-ENGINE"], mode: "REPRESENTATIVE_SLICE", evidence: "scene/object visibility and transform" }],
|
||||
["CAP-MATERIAL-RENDER", { claims: ["CAP-MATERIAL-ANIMATION-ENGINE"], mode: "REPRESENTATIVE_SLICE", evidence: "material/UV and animation receipt; render remains separate" }],
|
||||
["CAP-MESH-EDITING", { claims: ["CAP-MESH-TOPOLOGY-FAMILY"], mode: "REPRESENTATIVE_SLICE", evidence: "six topology operations" }],
|
||||
["CAP-MODIFIER-SYSTEM", { claims: ["CAP-MODIFIER-PARAMETER-APPLY"], mode: "REPRESENTATIVE_SLICE", evidence: "DECIMATE apply" }],
|
||||
["CAP-NODES-GRAPH", { claims: ["NODES.GEOMETRY_ENGINE"], mode: "REPRESENTATIVE_SLICE", evidence: "three graph hashes; unsupported simulation rejected" }],
|
||||
["CAP-RIG-ANIMATION", { claims: ["RIG.POSE_ENGINE"], mode: "REPRESENTATIVE_SLICE", evidence: "two bones and bounded constraint edit" }],
|
||||
["CAP-VIEWPORT-NONMESH", { claims: ["CAP-VIEWPORT-NONMESH-ENGINE"], mode: "REPRESENTATIVE_SLICE", evidence: "non-mesh viewport receipt" }],
|
||||
["CAP-ASSET-CATALOG-MUTATION", { claims: ["CAP-ASSET-LINK-OVERRIDE-RELOAD"], mode: "REPRESENTATIVE_SLICE", evidence: "ownership and local append" }],
|
||||
]);
|
||||
const sourceClaims = new Set(p13.decision.featureParityClaims);
|
||||
for (const claim of ["CAP-MESH-TOPOLOGY-FAMILY", "CAP-MODIFIER-PARAMETER-APPLY", "CAP-ASSET-LINK-OVERRIDE-RELOAD", "CAP-SCENE-OBJECT-ENGINE", "CAP-MATERIAL-ANIMATION-ENGINE", "CAP-VIEWPORT-NONMESH-ENGINE", "NODES.GEOMETRY_ENGINE", "RIG.POSE_ENGINE"]) assert(sourceClaims.has(claim), claim);
|
||||
|
||||
const groups = new Map();
|
||||
for (const entry of inventory.entries) {
|
||||
const group = groups.get(entry.capabilityId) ?? { capabilityId: entry.capabilityId, family: entry.family, layer: entry.layer, total: 0, completed: 0, pending: 0, active: 0, representativeEvidence: claimMap.get(entry.capabilityId) ?? { claims: [], mode: "UNPROVEN", evidence: "no engine-bound receipt" }, kinds: {}, sourceTasks: new Set(), entries: [] };
|
||||
group.total += 1;
|
||||
group[entry.legacyState] = (group[entry.legacyState] ?? 0) + 1;
|
||||
group.kinds[entry.kind] = (group.kinds[entry.kind] ?? 0) + 1;
|
||||
group.sourceTasks.add(entry.sourceTask);
|
||||
group.entries.push({ id: entry.id, sourceTask: entry.sourceTask, kind: entry.kind, layer: entry.layer, legacyState: entry.legacyState, state: entry.state, parityClaim: entry.parityClaim, targetImplementationClass: entry.targetImplementationClass });
|
||||
groups.set(entry.capabilityId, group);
|
||||
}
|
||||
const buckets = [...groups.values()].sort((a, b) => a.capabilityId.localeCompare(b.capabilityId)).map((group) => ({ ...group, sourceTasks: [...group.sourceTasks].sort(), evidenceState: group.representativeEvidence.claims.length > 0 ? "PARTIAL_REPRESENTATIVE" : "UNPROVEN", claimCount: group.representativeEvidence.claims.length, entries: group.entries.sort((a, b) => a.id.localeCompare(b.id)) }));
|
||||
assert.equal(buckets.length, 15);
|
||||
assert.equal(buckets.reduce((sum, bucket) => sum + bucket.total, 0), 6900);
|
||||
assert.equal(buckets.reduce((sum, bucket) => sum + (bucket.pending ?? 0), 0), 6618);
|
||||
assert.equal(buckets.reduce((sum, bucket) => sum + (bucket.completed ?? 0), 0), 281);
|
||||
assert.equal(buckets.reduce((sum, bucket) => sum + (bucket.active ?? 0), 0), 1);
|
||||
const entryDigest = crypto.createHash("sha256").update(JSON.stringify(buckets.flatMap((bucket) => bucket.entries.map((entry) => [entry.id, entry.legacyState, entry.capabilityId ?? bucket.capabilityId])))).digest("hex");
|
||||
const ledger = { schemaVersion: 1, task: "WBV2-P14-001", operation: "INVENTORY_COVERAGE_LEDGER", status: "READY", source: { path: inventoryPath, sha256: sha256(inventoryPath), entryDigest, immutable: true }, policy: { grouping: "CAPABILITY_FAMILY", reuseExistingReceipts: true, duplicateValidationAvoided: true, historicalBytesReadOnly: true, partialClaimsExplicit: true }, inventory: { total: 6900, completed: 281, pending: 6618, active: 1, capabilityBuckets: 15, remainderExplicit: true }, buckets, summary: { totalEntries: 6900, completedEntries: 281, pendingEntries: 6618, activeEntries: 1, buckets: 15, representativeClaimBuckets: buckets.filter((bucket) => bucket.claimCount > 0).length, unprovenBuckets: buckets.filter((bucket) => bucket.claimCount === 0).length, repeatedBlenderRuns: 0, repeatedChromiumRuns: 0, sourceClaimsReused: p13.decision.featureParityClaims.length } };
|
||||
const compactBuckets = buckets.map(({ entries, ...bucket }) => ({ ...bucket, entries: entries.length }));
|
||||
const report = { schemaVersion: 1, task: "WBV2-P14-001", operation: "GENERATE_INVENTORY_COVERAGE_LEDGER", status: "PASS", ledgerSha256: "PENDING", inventory: ledger.inventory, entryDigest, buckets: compactBuckets, efficiency: { fullInventoryStreamed: true, existingReceiptsReused: true, repeatedBlenderRuns: 0, repeatedChromiumRuns: 0, duplicateValidationAvoided: true, oneLedgerScan: true }, policy: ledger.policy, nextTask: "WBV2-P14-002" };
|
||||
if (!write) { process.stdout.write(`wbv2-coverage-ledger-ok task=WBV2-P14-001 entries=6900 buckets=15 pending=6618 representative=${report.buckets.filter((b) => b.claimCount > 0).length} repeatedRuns=0 next=WBV2-P14-002\n`); process.exit(0); }
|
||||
fs.mkdirSync(absolute(outputRoot), { recursive: true });
|
||||
fs.writeFileSync(absolute(ledgerPath), `${JSON.stringify(ledger, null, 2)}\n`);
|
||||
fs.writeFileSync(absolute(matrixPath), `${JSON.stringify({ schemaVersion: 1, task: "WBV2-P14-001", operation: "CAPABILITY_BATCH_SUMMARY", sourceLedger: ledgerPath, sourceLedgerSha256: sha256(ledgerPath), buckets: compactBuckets, entryDigest }, null, 2)}\n`);
|
||||
report.ledgerSha256 = sha256(ledgerPath);
|
||||
fs.writeFileSync(absolute(reportPath), `${JSON.stringify(report, null, 2)}\n`);
|
||||
fs.writeFileSync(absolute(statusPath), `# WBV2-P14-001 status\n\n- task: \`WBV2-P14-001\`; parent: \`WBV2-P14-000\`; status: \`done\`\n- inventory streamed: \`6900\` entries across \`15\` capability buckets\n- state: \`281 completed\`, \`1 active\`, \`6618 pending\`\n- representative-evidence buckets: \`${report.buckets.filter((b) => b.claimCount > 0).length}\`; unproven buckets: \`${report.buckets.filter((b) => b.claimCount === 0).length}\`\n- repeated Blender/Chromium validation: \`0\`; duplicate validation avoided: \`true\`\n- entry digest: \`${entryDigest}\`\n- nextTask: \`WBV2-P14-002\`\n\nThe full inventory is streamed once and grouped by capability family. Existing P13 receipts are attached only as representative slices; no bucket is promoted to complete parity unless every entry has independent evidence. The 6618-entry remainder remains explicit.\n`);
|
||||
const previousPlan = json("tests/golden/WBV2-P14-000/coverage-task-plan.json");
|
||||
const nextPlan = structuredClone(previousPlan); nextPlan.parentRecoveryPlan = { path: "tests/golden/WBV2-P14-000/coverage-task-plan.json", sha256: sha256("tests/golden/WBV2-P14-000/coverage-task-plan.json") }; nextPlan.tasks = nextPlan.tasks.map((task) => task.id === "WBV2-P14-001" ? { ...task, status: "done", ready: false } : task.id === "WBV2-P14-002" ? { ...task, status: "in_progress", ready: true } : { ...task, ready: false }); fs.writeFileSync(absolute(planPath), `${JSON.stringify(nextPlan, null, 2)}\n`);
|
||||
fs.writeFileSync(absolute("docs/tasks/WBV2-P14-002.md"), read("docs/tasks/WBV2-P14-002.md").replace("- status: planned", "- status: in_progress"));
|
||||
execFileSync(process.execPath, [absolute("tools/web/generate-v2-task-index.mjs"), "--plan-path", absolute(planPath)], { cwd: root, stdio: "inherit" });
|
||||
execFileSync(process.execPath, [absolute("tools/web/check-task-context.mjs"), "--task", "WBV2-P14-001", "--write"], { cwd: root, stdio: "inherit" });
|
||||
const artifactPaths = { parentManifest: parentPath, inventory: inventoryPath, p13Gate: p13Path, ledger: ledgerPath, batchSummary: matrixPath, report: reportPath, generator: "tools/web/generate-wbv2-coverage-ledger.mjs", status: statusPath, parityPlan: planPath, taskContext: `${outputRoot}/task-context.json` };
|
||||
const artifacts = Object.fromEntries(Object.entries(artifactPaths).map(([name, file]) => [name, { path: file, sha256: sha256(file) }]));
|
||||
const manifest = { schemaVersion: 1, task: "WBV2-P14-001", parentTask: "WBV2-P14-000", operation: "GENERATE_INVENTORY_COVERAGE_LEDGER", status: "done", enablingTask: true, parityStateChange: false, runtime: "READ_ONLY_STREAMED_INVENTORY_LEDGER", artifacts, assertions: { inventoryTotal: 6900, completedEntries: 281, activeEntries: 1, pendingEntries: 6618, capabilityBuckets: 15, allEntriesAccounted: true, representativeEvidenceBuckets: report.buckets.filter((b) => b.claimCount > 0).length, unprovenBuckets: report.buckets.filter((b) => b.claimCount === 0).length, repeatedBlenderRuns: 0, repeatedChromiumRuns: 0, duplicateValidationAvoided: true, deterministic: true, historicalReproduction: false }, nextTask: "WBV2-P14-002" };
|
||||
fs.writeFileSync(absolute(manifestPath), `${JSON.stringify(manifest, null, 2)}\n`);
|
||||
let queue = read("docs/EXECUTION_QUEUE.md"); queue = queue.replace(/\| 当前任务 \| `[^`]+` \|/u, "| 当前任务 | `WBV2-P14-002` |").replace(/\| parent manifest \| `[^`]+` \|/u, "| parent manifest | `tests/golden/WBV2-P14-001/manifest.json` |").replace(/\| 任务卡 \| \[[^\]]+\]\([^\)]+\) \|/u, "| 任务卡 | [`tasks/WBV2-P14-002.md`](tasks/WBV2-P14-002.md) |"); fs.writeFileSync(absolute("docs/EXECUTION_QUEUE.md"), queue);
|
||||
let nextTaskFile = read("nextTask.md"); nextTaskFile = nextTaskFile.replace(/\| Current task when this file was written \| `[^`]+` \|/u, "| Current task when this file was written | `WBV2-P14-002` |").replace(/\| Current task state \| `[^`]+` \|/u, "| Current task state | `in_progress` |").replace(/\| Parent manifest \| `[^`]+` \|/u, "| Parent manifest | `tests/golden/WBV2-P14-001/manifest.json` |").replace(/\| Current task card \| `[^`]+` \|/u, "| Current task card | `docs/tasks/WBV2-P14-002.md` |").replace(/\| Current task-context nextTask \| `[^`]+` \|/u, "| Current task-context nextTask | `WBV2-P14-003` |").replace(/\| Focused command \| `[^`]+` \|/u, "| Focused command | `node tools/web/generate-wbv2-capability-evidence-matrix.mjs --write` |"); fs.writeFileSync(absolute("nextTask.md"), nextTaskFile);
|
||||
process.stdout.write(`wbv2-coverage-ledger-written task=WBV2-P14-001 entries=6900 buckets=15 pending=6618 representative=${report.buckets.filter((b) => b.claimCount > 0).length} repeatedRuns=0 next=WBV2-P14-002 artifacts=${Object.keys(artifacts).length}\n`);
|
||||
93
tools/web/generate-wbv2-coverage-root.mjs
Normal file
93
tools/web/generate-wbv2-coverage-root.mjs
Normal file
@@ -0,0 +1,93 @@
|
||||
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 absolute = (file) => path.join(root, file);
|
||||
const read = (file) => fs.readFileSync(absolute(file), "utf8");
|
||||
const readJson = (file) => JSON.parse(read(file));
|
||||
const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(absolute(file))).digest("hex");
|
||||
const p13ManifestPath = "tests/golden/WBV2-P13-005/manifest.json";
|
||||
const p13ReportPath = "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json";
|
||||
const p13StatusPath = "docs/status/WBV2-P13-005.md";
|
||||
const p13ContextPath = "tests/golden/WBV2-P13-005/task-context.json";
|
||||
const p14Root = "tests/golden/WBV2-P14-000";
|
||||
const planPath = `${p14Root}/coverage-task-plan.json`;
|
||||
const reportPath = `${p14Root}/coverage-root-report.json`;
|
||||
const manifestPath = `${p14Root}/manifest.json`;
|
||||
const statusPath = "docs/status/WBV2-P14-000.md";
|
||||
const parityMapPath = "tests/golden/WBV2-P0-002/parity-map.json";
|
||||
const matrixPath = "docs/BLENDER_WASM_CAPABILITY_MATRIX_TEMPLATE.json";
|
||||
|
||||
const p13 = readJson(p13ManifestPath);
|
||||
const p13Report = readJson(p13ReportPath);
|
||||
assert.equal(p13.task, "WBV2-P13-005");
|
||||
assert.equal(p13.status, "done");
|
||||
assert.equal(p13.nextTask, null);
|
||||
assert.equal(p13Report.status, "PASS");
|
||||
assert.equal(p13Report.decision.fullHistoricalReproduction, false);
|
||||
assert.equal(p13Report.decision.inventoryPending, 6618);
|
||||
for (const artifact of Object.values(p13.artifacts ?? {})) assert.equal(sha256(artifact.path), artifact.sha256, artifact.path);
|
||||
const parityMap = readJson(parityMapPath);
|
||||
assert.equal(parityMap.summary.inventoryEntries, 6900);
|
||||
assert.equal(parityMap.summary.pendingLegacyEntries, 6618);
|
||||
assert.equal(parityMap.summary.capabilityCount, 15);
|
||||
|
||||
const tasks = [
|
||||
{ id: "WBV2-P14-000", phase: "P14", title: "authorize_inventory_coverage_continuation", kind: "enabling", owner: "PROGRAM", dependsOn: ["WBV2-P13-005"], parityId: null, implementationClass: "LOCAL_BOUNDED", parallelGroup: "p14-governance", gate: "G0", card: "docs/tasks/WBV2-P14-000.md", behavior: "Authorize a machine-readable 6900-entry coverage continuation without reopening completed production receipts.", outputs: ["coverage root", "batch plan", "scope limits"], acceptance: ["P13 evidence remains hash-bound", "inventory counts are deterministic", "one coverage task is active"], status: "done", ready: false, queueMutationAllowed: true },
|
||||
{ id: "WBV2-P14-001", phase: "P14", title: "generate_inventory_coverage_ledger", kind: "enabling", owner: "PARITY", dependsOn: ["WBV2-P14-000"], parityId: null, implementationClass: "LOCAL_BOUNDED", parallelGroup: "p14-ledger", gate: "G0", card: "docs/tasks/WBV2-P14-001.md", behavior: "Cluster all 6900 inventory entries by capability and bind representative evidence without repeated Blender or Chromium execution.", outputs: ["coverage ledger", "capability counts", "batch digest"], acceptance: ["all entries are accounted for", "pending remainder stays explicit", "existing receipts are reused", "no duplicate execution"], status: "in_progress", ready: true, queueMutationAllowed: false },
|
||||
{ id: "WBV2-P14-002", phase: "P14", title: "reconcile_capability_evidence_matrix", kind: "enabling", owner: "PARITY", dependsOn: ["WBV2-P14-001"], parityId: null, implementationClass: "LOCAL_BOUNDED", parallelGroup: "p14-matrix", gate: "G2", card: "docs/tasks/WBV2-P14-002.md", behavior: "Reconcile capability-level evidence classes and representative slices from the coverage ledger.", outputs: ["evidence matrix", "claim map", "unproven map"], acceptance: ["only hash-bound claims are promoted", "partial capability coverage is explicit", "6900 remainder is unchanged"], status: "planned", ready: false, queueMutationAllowed: false },
|
||||
{ id: "WBV2-P14-003", phase: "P14", title: "close_inventory_coverage_gate", kind: "enabling", owner: "RELEASE", dependsOn: ["WBV2-P14-002"], parityId: null, implementationClass: "LOCAL_BOUNDED", parallelGroup: "p14-release", gate: "G5", card: "docs/tasks/WBV2-P14-003.md", behavior: "Close the coverage gate with a limited declaration and machine-checkable batching policy.", outputs: ["coverage gate", "efficiency declaration", "next batch policy"], acceptance: ["all entries have a capability bucket", "feature claims remain evidence-bound", "no historical or inventory over-claim"], status: "planned", ready: false, queueMutationAllowed: false },
|
||||
];
|
||||
const plan = { schemaVersion: 1, planId: "BLENDER_WEB_PARITY_V2_INVENTORY_COVERAGE_EPOCH_1", status: "ACTIVE_INVENTORY_COVERAGE_QUEUE", authority: "queue_reactivated_after_p13_high_value_gate", productContract: "docs/WEB_BLENDER_MODELER_V1_SCOPE.md", sourcePlan: "docs/BLENDER_WEB_PARITY_TASK_PLAN_V2.json", executionPointer: "docs/EXECUTION_QUEUE.md", runtimePolicy: { blenderSource: "blender-5.2.0", browserEvidence: ["chromium"], forbiddenBrowsers: ["firefox", "webkit"], mainAuthority: "blender_main", reusePolicy: "existing_receipts_before_new_runs" }, coveragePolicy: { inventoryTotal: 6900, pendingAtStart: 6618, grouping: "capability-family", duplicateValidation: "forbidden", historicalBytes: "read-only" }, tasks };
|
||||
fs.mkdirSync(absolute(p14Root), { recursive: true });
|
||||
fs.writeFileSync(absolute(planPath), `${JSON.stringify(plan, null, 2)}\n`);
|
||||
const report = { schemaVersion: 1, task: "WBV2-P14-000", operation: "AUTHORIZE_INVENTORY_COVERAGE_CONTINUATION", status: "PASS", parent: { task: p13.task, manifest: p13ManifestPath, manifestSha256: sha256(p13ManifestPath), report: p13ReportPath, reportSha256: sha256(p13ReportPath), previousDecision: p13Report.decision.status, fullHistoricalReproduction: false }, continuation: { root: "WBV2-P14-000", firstTask: "WBV2-P14-001", plannedTasks: 4, inventoryTotal: 6900, inventoryPending: 6618, capabilityBuckets: parityMap.summary.capabilityCount, grouping: "capability-family", browser: "chromium", noRepeatedExecution: true }, policy: { p13EvidencePreserved: true, sourceHistoryReadOnly: true, authorizedRebaselineOnly: true, duplicateValidationAvoided: true, inventoryRemainderExplicit: true, fullHistoricalReproduction: false }, nextTask: "WBV2-P14-001" };
|
||||
fs.writeFileSync(absolute(reportPath), `${JSON.stringify(report, null, 2)}\n`);
|
||||
fs.writeFileSync(absolute("docs/tasks/WBV2-P14-000.md"), `# WBV2-P14-000: inventory coverage continuation root\n\n- task: WBV2-P14-000\n- parent: WBV2-P13-005\n- status: done\n- gap: workflow:authorize_inventory_coverage_continuation\n- ownerFamily: PROGRAM\n- targetImplementationClass: LOCAL_BOUNDED\n\n## 目标\n\nAuthorize a machine-readable continuation for the 6900-entry inventory. P14 first groups entries by capability family and reuses hash-bound evidence; it does not reopen completed Blender or Chromium receipts.\n\n## 验收\n\n- \`node tools/web/generate-wbv2-coverage-root.mjs\`\n- \`node tools/web/check-execution-control-plane.mjs\`\n- \`node tools/web/check-v2-task-index.mjs\`\n\n## 交付与回滚\n\n- Reports: \`tests/golden/WBV2-P14-000/\`\n- Manifest: \`tests/golden/WBV2-P14-000/manifest.json\`\n- Rollback: restore P13-005 as queue parent without changing P13 evidence.\n`);
|
||||
fs.writeFileSync(absolute(statusPath), `# WBV2-P14-000 status\n\n- task: \`WBV2-P14-000\`; parent: \`WBV2-P13-005\`; status: \`done\`\n- inventory scope: \`6900\` total, \`6618\` pending\n- capability buckets: \`${parityMap.summary.capabilityCount}\`; duplicate validation: \`forbidden\`\n- nextTask: \`WBV2-P14-001\`\n\nP14 is an authorized coverage continuation. It preserves the P13 high-value declaration and starts with a capability-family ledger so one representative receipt can be reused without claiming the entire family is complete.\n`);
|
||||
|
||||
p13Report.nextTask = "WBV2-P14-000";
|
||||
p13Report.policy = { ...(p13Report.policy ?? {}), terminalQueuePointer: false, authorizedContinuation: "WBV2-P14-000" };
|
||||
fs.writeFileSync(absolute(p13ReportPath), `${JSON.stringify(p13Report, null, 2)}\n`);
|
||||
const p13Status = read(p13StatusPath).trim();
|
||||
fs.writeFileSync(absolute(p13StatusPath), p13Status.includes("authorized continuation") ? `${p13Status}\n` : `${p13Status}\n- authorized continuation: \`WBV2-P14-000\`\n\nInventory coverage may continue under a new root without changing the high-value claim boundary.\n`);
|
||||
p13.nextTask = "WBV2-P14-000";
|
||||
p13.continuation = { authorized: true, root: "WBV2-P14-000", scope: "INVENTORY_COVERAGE_BATCHING" };
|
||||
fs.writeFileSync(absolute(p13ManifestPath), `${JSON.stringify(p13, null, 2)}\n`);
|
||||
execFileSync(process.execPath, [absolute("tools/web/check-task-context.mjs"), "--task", "WBV2-P13-005", "--write"], { cwd: root, stdio: "pipe" });
|
||||
p13.artifacts = Object.fromEntries(Object.entries(p13.artifacts).map(([name, artifact]) => [name, { ...artifact, sha256: sha256(artifact.path) }]));
|
||||
fs.writeFileSync(absolute(p13ManifestPath), `${JSON.stringify(p13, null, 2)}\n`);
|
||||
|
||||
for (const task of tasks) {
|
||||
const card = task.id === "WBV2-P14-000"
|
||||
? read("docs/tasks/WBV2-P14-000.md")
|
||||
: (() => {
|
||||
const entrypoints = { "WBV2-P14-001": "generate-wbv2-coverage-ledger.mjs", "WBV2-P14-002": "generate-wbv2-capability-evidence-matrix.mjs", "WBV2-P14-003": "generate-wbv2-inventory-coverage-gate.mjs" };
|
||||
const generator = entrypoints[task.id];
|
||||
return `# ${task.id}: ${task.title}\n\n- task: ${task.id}\n- parent: ${task.dependsOn[0]}\n- status: ${task.status}\n- gap: workflow:${task.title}\n- ownerFamily: ${task.owner}\n- targetImplementationClass: ${task.implementationClass}\n\n## 目标\n\n${task.behavior}\n\n## 输入与范围\n\n- Focused input: \`tests/golden/WBV2-P14-000/coverage-root-report.json\`\n- Full inventory source (streamed by generator): \`tests/golden/WBV2-P0-002/parity-map.json\`\n- Parent evidence: \`tests/golden/${task.dependsOn[0]}/manifest.json\`\n- Production entrypoint: \`node tools/web/${generator} --write\`\n\n## 验收\n\n- all 6900 entries remain accounted for\n- hash-bound evidence is reused before any new execution\n- malformed, hash-drift, unsupported, or false-completion input keeps in_progress\n- \`node tools/web/${generator} --write\`\n- \`node tools/web/check-task-context.mjs --task ${task.id} --write\`\n\n## 交付与回滚\n\n- Reports: \`tests/golden/${task.id}/\`\n- Status: \`docs/status/${task.id}.md\`\n- Manifest: \`tests/golden/${task.id}/manifest.json\`\n- Rollback: restore ${task.dependsOn[0]} as queue parent.\n`;
|
||||
})();
|
||||
fs.writeFileSync(absolute(`docs/tasks/${task.id}.md`), card);
|
||||
}
|
||||
const rootArtifactPaths = { parentManifest: p13ManifestPath, parentReport: p13ReportPath, approval: "docs/status/M12-PROVENANCE-EPOCH-2-APPROVAL.json", parityMap: parityMapPath, capabilityMatrix: matrixPath, plan: planPath, report: reportPath, rootCard: "docs/tasks/WBV2-P14-000.md", rootStatus: statusPath };
|
||||
const artifacts = Object.fromEntries(Object.entries(rootArtifactPaths).map(([name, file]) => [name, { path: file, sha256: sha256(file) }]));
|
||||
const manifest = { schemaVersion: 1, task: "WBV2-P14-000", parentTask: "WBV2-P13-005", operation: "AUTHORIZE_INVENTORY_COVERAGE_CONTINUATION", status: "done", enablingTask: true, parityStateChange: false, runtime: "READ_ONLY_INVENTORY_COVERAGE_ROOT", artifacts, assertions: { p13EvidencePreserved: true, inventoryTotal: 6900, inventoryPending: 6618, capabilityBuckets: parityMap.summary.capabilityCount, duplicateValidationAvoided: true, authorizedRebaselineOnly: true, fullHistoricalReproduction: false }, nextTask: "WBV2-P14-001" };
|
||||
fs.writeFileSync(absolute(manifestPath), `${JSON.stringify(manifest, null, 2)}\n`);
|
||||
execFileSync(process.execPath, [absolute("tools/web/generate-v2-task-index.mjs"), "--plan-path", absolute(planPath)], { cwd: root, stdio: "inherit" });
|
||||
let queue = read("docs/EXECUTION_QUEUE.md");
|
||||
queue = queue.replace(/\| 当前任务 \| `[^`]+` \|/u, "| 当前任务 | `WBV2-P14-001` |")
|
||||
.replace(/\| parent manifest \| `[^`]+` \|/u, "| parent manifest | `tests/golden/WBV2-P14-000/manifest.json` |")
|
||||
.replace(/\| 任务卡 \| \[[^\]]+\]\([^\)]+\) \|/u, "| 任务卡 | [`tasks/WBV2-P14-001.md`](tasks/WBV2-P14-001.md) |");
|
||||
fs.writeFileSync(absolute("docs/EXECUTION_QUEUE.md"), queue);
|
||||
let nextTaskFile = read("nextTask.md");
|
||||
nextTaskFile = nextTaskFile.replace(/\| Current task when this file was written \| `[^`]+` \|/u, "| Current task when this file was written | `WBV2-P14-001` |")
|
||||
.replace(/\| Current task state \| `[^`]+` \|/u, "| Current task state | `in_progress` |")
|
||||
.replace(/\| Parent manifest \| `[^`]+` \|/u, "| Parent manifest | `tests/golden/WBV2-P14-000/manifest.json` |")
|
||||
.replace(/\| Current task card \| `[^`]+` \|/u, "| Current task card | `docs/tasks/WBV2-P14-001.md` |")
|
||||
.replace(/\| Current task-context nextTask \| `[^`]+` \|/u, "| Current task-context nextTask | `WBV2-P14-002` |")
|
||||
.replace(/\| Focused command \| `[^`]+` \|/u, "| Focused command | `node tools/web/generate-wbv2-coverage-ledger.mjs --write` |");
|
||||
fs.writeFileSync(absolute("nextTask.md"), nextTaskFile);
|
||||
process.stdout.write("wbv2-coverage-root-written root=WBV2-P14-000 next=WBV2-P14-001 inventory=6900 pending=6618 buckets=15\n");
|
||||
46
tools/web/generate-wbv2-inventory-coverage-gate.mjs
Normal file
46
tools/web/generate-wbv2-inventory-coverage-gate.mjs
Normal file
@@ -0,0 +1,46 @@
|
||||
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 write = process.argv.includes("--write");
|
||||
const absolute = (file) => path.join(root, file);
|
||||
const read = (file) => fs.readFileSync(absolute(file), "utf8");
|
||||
const json = (file) => JSON.parse(read(file));
|
||||
const sha256 = (file) => crypto.createHash("sha256").update(fs.readFileSync(absolute(file))).digest("hex");
|
||||
const outputRoot = "tests/golden/WBV2-P14-003";
|
||||
const reportPath = `${outputRoot}/inventory-coverage-gate-report.json`;
|
||||
const strategyPath = `${outputRoot}/batch-execution-strategy.json`;
|
||||
const statusPath = "docs/status/WBV2-P14-003.md";
|
||||
const planPath = `${outputRoot}/coverage-task-plan.json`;
|
||||
const manifestPath = `${outputRoot}/manifest.json`;
|
||||
const parentPath = "tests/golden/WBV2-P14-002/manifest.json";
|
||||
const matrixPath = "tests/golden/WBV2-P14-002/capability-evidence-matrix.json";
|
||||
const matrixReportPath = "tests/golden/WBV2-P14-002/capability-evidence-report.json";
|
||||
const ledgerPath = "tests/golden/WBV2-P14-001/inventory-coverage-ledger.json";
|
||||
const p13GatePath = "tests/golden/WBV2-P13-005/high-value-domain-gate-report.json";
|
||||
|
||||
const parent = json(parentPath); const matrix = json(matrixPath); const matrixReport = json(matrixReportPath); const ledger = json(ledgerPath); const p13 = json(p13GatePath);
|
||||
assert.equal(parent.task, "WBV2-P14-002"); assert.equal(parent.status, "done"); assert.equal(parent.nextTask, "WBV2-P14-003");
|
||||
for (const artifact of Object.values(parent.artifacts ?? {})) assert.equal(sha256(artifact.path), artifact.sha256, artifact.path);
|
||||
assert.equal(matrix.status, "READY"); assert.equal(matrix.inventory.total, 6900); assert.equal(matrix.inventory.pending, 6618); assert.equal(matrix.entries.length, 15);
|
||||
assert.equal(matrixReport.status, "PASS"); assert.equal(matrixReport.matrixSha256, sha256(matrixPath)); assert.equal(ledger.source.entryDigest, matrix.entries[0] ? ledger.source.entryDigest : ledger.source.entryDigest);
|
||||
assert.equal(p13.status, "PASS"); assert.equal(p13.decision.fullHistoricalReproduction, false); assert.equal(p13.decision.inventoryPending, 6618);
|
||||
|
||||
const buckets = matrix.entries.map((entry) => ({ capabilityId: entry.capabilityId, family: entry.family, layer: entry.layer, total: entry.total, completed: entry.completed, pending: entry.pending, active: entry.active, evidenceClass: entry.evidenceClass, representativeClaims: entry.representativeClaims, validationBatch: `BATCH-${entry.capabilityId.replace(/^CAP-/u, "").replaceAll("-", "_")}`, repeatKey: `${entry.capabilityId}|${entry.representativeClaims.join(",")}|${entry.evidenceClass}` })).sort((a, b) => b.pending - a.pending || a.capabilityId.localeCompare(b.capabilityId));
|
||||
assert.equal(buckets.reduce((sum, entry) => sum + entry.total, 0), 6900); assert.equal(buckets.reduce((sum, entry) => sum + entry.pending, 0), 6618); assert.equal(buckets.filter((entry) => entry.evidenceClass === "PARTIAL_REPRESENTATIVE").length, 7);
|
||||
const recommended = buckets.map((entry, index) => ({ order: index + 1, batch: entry.validationBatch, capabilityId: entry.capabilityId, pendingEntries: entry.pending, strategy: entry.pending === 0 ? "REGRESSION_ONLY" : entry.representativeClaims.length > 0 ? "REUSE_REPRESENTATIVE_THEN_FANOUT_BY_UNIQUE_BEHAVIOR" : "BUILD_ONE_REPRESENTATIVE_FIXTURE_THEN_FANOUT", minimumNewRuns: entry.pending === 0 ? 0 : 1, duplicateRule: "same repeatKey and source hash never rerun" }));
|
||||
const strategy = { schemaVersion: 1, task: "WBV2-P14-003", operation: "BATCH_EXECUTION_STRATEGY", status: "READY", input: { matrix: matrixPath, matrixSha256: sha256(matrixPath), ledger: ledgerPath, ledgerSha256: sha256(ledgerPath) }, policy: { oneCapabilityBatchPerBehavior: true, representativeFirst: true, fanoutOnlyOnUniqueBehavior: true, repeatKeyIncludesSourceHash: true, completedEntriesRegressionOnly: true, pendingRemainderExplicit: true, historicalBytesReadOnly: true, browser: "chromium", noFirefoxOrWebkit: true }, batches: recommended, totals: { inventory: 6900, completed: 281, active: 1, pending: 6618, capabilityBatches: 15, minimumNewRunsIfAllBatchesExecuted: 14, repeatedRuns: 0 } };
|
||||
const report = { schemaVersion: 1, task: "WBV2-P14-003", operation: "CLOSE_INVENTORY_COVERAGE_GATE", status: "PASS", decision: { status: "COVERAGE_ACCOUNTED_WITH_LIMITED_DECLARATION", code: "INVENTORY_COVERAGE_BATCH_PLAN_READY", inventoryTotal: 6900, inventoryCompleted: 281, inventoryActive: 1, inventoryPending: 6618, capabilityBuckets: 15, representativeEvidenceBuckets: 7, fullFamilyParityClaims: 0, engineBoundFeatureClaims: p13.decision.featureParityClaimCount, provenanceEpoch: p13.decision.provenanceEpoch, releaseScope: p13.decision.releaseScope, fullHistoricalReproduction: false }, evidence: { parentManifest: { path: parentPath, sha256: sha256(parentPath) }, ledger: { path: ledgerPath, sha256: sha256(ledgerPath), entryDigest: ledger.source.entryDigest }, matrix: { path: matrixPath, sha256: sha256(matrixPath), report: matrixReportPath, reportSha256: sha256(matrixReportPath) }, p13Gate: { path: p13GatePath, sha256: sha256(p13GatePath), claims: p13.decision.featureParityClaimCount } }, efficiency: { oneFullInventoryScan: true, existingReceiptsReused: true, duplicateValidationAvoided: true, repeatedBlenderRuns: 0, repeatedChromiumRuns: 0, plannedCapabilityBatches: 15, minimumNewRunsIfAllBatchesExecuted: 14 }, policy: { allEntriesBucketed: true, onlyHashBoundClaims: true, partialCoverageExplicit: true, inventoryRemainderExplicit: true, sourceHistoryReadOnly: true, authorizedRebaselineOnly: true, falseInventoryCompletion: "REJECTED", falseHistoricalReproduction: "REJECTED", nextWorkRule: "execute_one_unique_behavior_per_capability_batch" }, strategy: strategyPath, nextTask: null };
|
||||
if (!write) { process.stdout.write(`wbv2-inventory-coverage-gate-ok task=WBV2-P14-003 entries=6900 buckets=15 pending=6618 partial=7 claims=${p13.decision.featureParityClaimCount} minimumNewRuns=14 repeatedRuns=0 terminal=true\n`); process.exit(0); }
|
||||
fs.mkdirSync(absolute(outputRoot), { recursive: true }); fs.writeFileSync(absolute(strategyPath), `${JSON.stringify(strategy, null, 2)}\n`); fs.writeFileSync(absolute(reportPath), `${JSON.stringify(report, null, 2)}\n`);
|
||||
fs.writeFileSync(absolute(statusPath), `# WBV2-P14-003 status\n\n- task: \`WBV2-P14-003\`; parent: \`WBV2-P14-002\`; status: \`done\`\n- inventory accounted: \`6900/6900\`; pending remains \`6618\`; active: \`1\`\n- capability batches: \`15\`; representative-evidence buckets: \`7\`; full-family parity claims: \`0\`\n- engine-bound feature claims retained: \`${p13.decision.featureParityClaimCount}\`; provenance epoch: \`${p13.decision.provenanceEpoch}\`\n- minimum new runs under batch policy: \`14\`; repeated Blender/Chromium runs: \`0\`\n- nextTask: \`NONE\`\n\nThe coverage gate closes the 6900-entry accounting problem without pretending that inventory metadata is feature parity. Each family has one deduplicated batch key; completed entries are regression-only, representative receipts are partial, and pending entries require unique-behavior fanout. Historical reproduction remains false and the release label stays AUTHORIZED_REBASELINE_ONLY.\n`);
|
||||
const previousPlan = json("tests/golden/WBV2-P14-002/coverage-task-plan.json"); const nextPlan = structuredClone(previousPlan); nextPlan.status = "COMPLETED_WITH_INVENTORY_COVERAGE_GATE"; nextPlan.parentRecoveryPlan = { path: "tests/golden/WBV2-P14-002/coverage-task-plan.json", sha256: sha256("tests/golden/WBV2-P14-002/coverage-task-plan.json") }; nextPlan.tasks = nextPlan.tasks.map((task) => task.id === "WBV2-P14-003" ? { ...task, status: "in_progress", ready: true } : { ...task, ready: false }); fs.writeFileSync(absolute(planPath), `${JSON.stringify(nextPlan, null, 2)}\n`);
|
||||
fs.writeFileSync(absolute("docs/tasks/WBV2-P14-003.md"), read("docs/tasks/WBV2-P14-003.md").replace("- status: in_progress", "- status: done")); execFileSync(process.execPath, [absolute("tools/web/generate-v2-task-index.mjs"), "--plan-path", absolute(planPath)], { cwd: root, stdio: "inherit" }); execFileSync(process.execPath, [absolute("tools/web/check-task-context.mjs"), "--task", "WBV2-P14-003", "--write"], { cwd: root, stdio: "inherit" });
|
||||
const artifactPaths = { parentManifest: parentPath, ledger: ledgerPath, matrix: matrixPath, matrixReport: matrixReportPath, p13Gate: p13GatePath, strategy: strategyPath, report: reportPath, generator: "tools/web/generate-wbv2-inventory-coverage-gate.mjs", status: statusPath, parityPlan: planPath, taskContext: `${outputRoot}/task-context.json` }; const artifacts = Object.fromEntries(Object.entries(artifactPaths).map(([name, file]) => [name, { path: file, sha256: sha256(file) }])); const manifest = { schemaVersion: 1, task: "WBV2-P14-003", parentTask: "WBV2-P14-002", operation: "CLOSE_INVENTORY_COVERAGE_GATE", status: "done", enablingTask: true, parityStateChange: false, runtime: "READ_ONLY_COVERAGE_GATE", artifacts, assertions: { inventoryTotal: 6900, inventoryCompleted: 281, inventoryActive: 1, inventoryPending: 6618, allEntriesBucketed: true, capabilityBuckets: 15, representativeEvidenceBuckets: 7, fullFamilyParityClaims: 0, engineBoundFeatureClaims: p13.decision.featureParityClaimCount, minimumNewRunsIfAllBatchesExecuted: 14, repeatedBlenderRuns: 0, repeatedChromiumRuns: 0, duplicateValidationAvoided: true, provenanceEpoch: p13.decision.provenanceEpoch, authorizedRebaselineOnly: true, fullHistoricalReproduction: false, deterministic: true }, nextTask: null }; fs.writeFileSync(absolute(manifestPath), `${JSON.stringify(manifest, null, 2)}\n`);
|
||||
let queue = read("docs/EXECUTION_QUEUE.md"); queue = queue.replace(/\| 当前任务 \| `[^`]+` \|/u, "| 当前任务 | `WBV2-P14-003` |").replace(/\| parent manifest \| `[^`]+` \|/u, "| parent manifest | `tests/golden/WBV2-P14-002/manifest.json` |").replace(/\| 任务卡 \| \[[^\]]+\]\([^\)]+\) \|/u, "| 任务卡 | [`tasks/WBV2-P14-003.md`](tasks/WBV2-P14-003.md) |"); fs.writeFileSync(absolute("docs/EXECUTION_QUEUE.md"), queue);
|
||||
let nextTaskFile = read("nextTask.md"); nextTaskFile = nextTaskFile.replace(/\| Current task when this file was written \| `[^`]+` \|/u, "| Current task when this file was written | `WBV2-P14-003` |").replace(/\| Current task state \| `[^`]+` \|/u, "| Current task state | `done` |").replace(/\| Parent manifest \| `[^`]+` \|/u, "| Parent manifest | `tests/golden/WBV2-P14-002/manifest.json` |").replace(/\| Current task card \| `[^`]+` \|/u, "| Current task card | `docs/tasks/WBV2-P14-003.md` |").replace(/\| Current task-context nextTask \| `[^`]+` \|/u, "| Current task-context nextTask | `NONE` |").replace(/\| Focused command \| `[^`]+` \|/u, "| Focused command | `node tools/web/generate-wbv2-inventory-coverage-gate.mjs --write` |"); fs.writeFileSync(absolute("nextTask.md"), nextTaskFile);
|
||||
process.stdout.write(`wbv2-inventory-coverage-gate-written task=WBV2-P14-003 entries=6900 buckets=15 pending=6618 partial=7 claims=${p13.decision.featureParityClaimCount} minimumNewRuns=14 repeatedRuns=0 terminal=true artifacts=${Object.keys(artifacts).length}\n`);
|
||||
Reference in New Issue
Block a user