docs(web): publish detailed feature completeness audit
This commit is contained in:
@@ -149,6 +149,7 @@ def project_progress() -> dict:
|
||||
route_catalog = _read_json(ROOT / "web/app/src/capabilities/blender-feature-route-catalog.json")
|
||||
product_backlog = _read_json(CONTROL_ROOT / "web-product-backlog.json")
|
||||
product_status = _read_json(CONTROL_ROOT / "web-product-migration-status.json")
|
||||
completeness_audit = _read_json(ROOT / "tests/golden/WBV2/feature-completeness-audit.json")
|
||||
total = int(inventory.get("summary", {}).get("unitCount", 0) or 0)
|
||||
verified = int(inventory.get("coverage", {}).get("verifiedUnits", 0) or 0)
|
||||
unverified = int(inventory.get("coverage", {}).get("unverifiedUnits", max(0, total - verified)) or 0)
|
||||
@@ -287,6 +288,13 @@ def project_progress() -> dict:
|
||||
},
|
||||
"featureRouteCoverage": feature_route_coverage,
|
||||
"featureRouteGaps": feature_route_gaps,
|
||||
"completenessAudit": {
|
||||
"status": completeness_audit.get("status", "MISSING"),
|
||||
"implementationTasks": completeness_audit.get("implementation", {}).get("productTasks", {}),
|
||||
"behavioralEvidence": completeness_audit.get("behavioralEvidence", {}),
|
||||
"smoke": completeness_audit.get("smoke", {}),
|
||||
"actualMissingOrBlocked": completeness_audit.get("actualMissingOrBlocked", []),
|
||||
},
|
||||
"productMigration": {
|
||||
**product_status,
|
||||
"strategy": product_backlog.get("strategy"),
|
||||
@@ -430,6 +438,7 @@ def format_progress(progress: dict, fast_path: dict | None = None) -> list[str]:
|
||||
f" implementation tasks: {product.get('taskImplemented', 0)}/{product.get('taskTotal', 0)} done, active={','.join(product.get('taskActive', [])) or 'none'}, pending={product.get('taskPending', 0)}, blocked={','.join(product.get('taskBlocked', [])) or 'none'}",
|
||||
f" implementation estimate: {product_estimate if product_estimate is not None else 'learning'} minutes remaining; verification={product.get('verificationPolicy') or 'deferred'}",
|
||||
f" source traceability reference: {progress.get('verifiedUnits', 0)}/{progress.get('totalUnits', 0)} bound; excluded from product completion denominator",
|
||||
f" completeness audit: {progress.get('completenessAudit', {}).get('status', 'MISSING')} blocked={sum(item.get('status') == 'BLOCKED' for item in progress.get('completenessAudit', {}).get('actualMissingOrBlocked', []))} behavioral-unverified={progress.get('completenessAudit', {}).get('behavioralEvidence', {}).get('unverifiedUnits', 0)}",
|
||||
f" task plan: {plan.get('done', 0)}/{plan.get('tasks', 0)} done, active={','.join(plan.get('active', [])) or 'none'}, blocked={plan.get('blocked', 0)}",
|
||||
f" old verification estimate: remaining={estimate_text}, total={total_text} (reference only; strategy retired)",
|
||||
f" observed bottleneck: stage={progress.get('bottleneck', {}).get('stage') or 'n/a'} median={progress.get('bottleneck', {}).get('medianDurationMs') or 0}ms command={progress.get('bottleneck', {}).get('label') or 'n/a'}",
|
||||
|
||||
Reference in New Issue
Block a user