Upload 4 files
Browse files
README.md
CHANGED
|
@@ -133,7 +133,15 @@ See `CHANGELOG_V194.md` for the Model Pre-scan Decision Card UI pass.
|
|
| 133 |
See `CHANGELOG_V195.md` for the Runtime CSS Cleanup with Legacy Safety Net pass.
|
| 134 |
|
| 135 |
|
| 136 |
-
Current release: Agentic Space Factory v198.26.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 137 |
|
| 138 |
## v198.26.124 — Expert Validation UI Polish
|
| 139 |
|
|
|
|
| 133 |
See `CHANGELOG_V195.md` for the Runtime CSS Cleanup with Legacy Safety Net pass.
|
| 134 |
|
| 135 |
|
| 136 |
+
Current release: Agentic Space Factory v198.26.125.
|
| 137 |
+
|
| 138 |
+
## v198.26.125 — Multi-attempt Agent Recovery Tabs
|
| 139 |
+
|
| 140 |
+
- Active Run now shows structured `Agent recovery` tabs when a run chains multiple Pi repair attempts.
|
| 141 |
+
- Each attempt displays its own diagnosis, decision, patch/rebuild action, revalidation result, signatures, changed files and source links.
|
| 142 |
+
- The UI preserves the selected attempt during live polling and keeps the previous single recovery summary for older runs.
|
| 143 |
+
|
| 144 |
+
See `CHANGELOG_V198_26_125.md`.
|
| 145 |
|
| 146 |
## v198.26.124 — Expert Validation UI Polish
|
| 147 |
|
app.py
CHANGED
|
@@ -1395,7 +1395,7 @@ def register_custom_routes(fastapi_app: FastAPI) -> None:
|
|
| 1395 |
run_id = validate_run_id(run_id)
|
| 1396 |
bucket_source = user_bucket_source(username=ctx["username"], bucket_name=bucket_name)
|
| 1397 |
snapshot = _build_live_run_snapshot(run_id, bucket_source=bucket_source, token=ctx["token"], include_heavy=False)
|
| 1398 |
-
return JSONResponse({**snapshot["view"], "summary": snapshot["summary"], "state": snapshot["state"], "events": snapshot["events"], "events_recent": snapshot["events"][-100:], "events_count": len(snapshot["events"]), "eval_publish": snapshot["eval_publish"], "final_status_reconciliation": snapshot["bundle"].get("final_status_reconciliation") or {}, "eval_record": snapshot["bundle"].get("eval_record") or {}, "validation_metrics": snapshot["view"].get("validation_metrics") or {}, "run_documents": snapshot["view"].get("run_documents") or snapshot["bundle"].get("run_documents") or [], "space_link_state": snapshot["view"].get("space_link_state") or {}, "runtime_stage_history": snapshot["view"].get("runtime_stage_history") or {}, "space_identity": snapshot["bundle"].get("space_identity") or {}, "links": snapshot["view"].get("links") or {}})
|
| 1399 |
|
| 1400 |
@fastapi_app.post("/api/runs/{run_id}/cancel")
|
| 1401 |
async def api_cancel_run(request: Request, run_id: str, bucket_name: str = settings.bucket_name): # type: ignore[no-untyped-def]
|
|
@@ -1624,6 +1624,7 @@ def register_custom_routes(fastapi_app: FastAPI) -> None:
|
|
| 1624 |
"technical_blockers": bundle.get("technical_blockers") or {},
|
| 1625 |
"repair_decision": bundle.get("repair_decision") or {},
|
| 1626 |
"blockage": bundle.get("blockage") or {},
|
|
|
|
| 1627 |
"run_documents": view.get("run_documents") or bundle.get("run_documents") or [],
|
| 1628 |
"validation_metrics": view.get("validation_metrics") or {},
|
| 1629 |
"post_build_validation_status": bundle.get("post_build_validation_status") or {},
|
|
|
|
| 1395 |
run_id = validate_run_id(run_id)
|
| 1396 |
bucket_source = user_bucket_source(username=ctx["username"], bucket_name=bucket_name)
|
| 1397 |
snapshot = _build_live_run_snapshot(run_id, bucket_source=bucket_source, token=ctx["token"], include_heavy=False)
|
| 1398 |
+
return JSONResponse({**snapshot["view"], "summary": snapshot["summary"], "state": snapshot["state"], "events": snapshot["events"], "events_recent": snapshot["events"][-100:], "events_count": len(snapshot["events"]), "repair_attempts": snapshot["bundle"].get("repair_attempts") or {}, "eval_publish": snapshot["eval_publish"], "final_status_reconciliation": snapshot["bundle"].get("final_status_reconciliation") or {}, "eval_record": snapshot["bundle"].get("eval_record") or {}, "validation_metrics": snapshot["view"].get("validation_metrics") or {}, "run_documents": snapshot["view"].get("run_documents") or snapshot["bundle"].get("run_documents") or [], "space_link_state": snapshot["view"].get("space_link_state") or {}, "runtime_stage_history": snapshot["view"].get("runtime_stage_history") or {}, "space_identity": snapshot["bundle"].get("space_identity") or {}, "links": snapshot["view"].get("links") or {}})
|
| 1399 |
|
| 1400 |
@fastapi_app.post("/api/runs/{run_id}/cancel")
|
| 1401 |
async def api_cancel_run(request: Request, run_id: str, bucket_name: str = settings.bucket_name): # type: ignore[no-untyped-def]
|
|
|
|
| 1624 |
"technical_blockers": bundle.get("technical_blockers") or {},
|
| 1625 |
"repair_decision": bundle.get("repair_decision") or {},
|
| 1626 |
"blockage": bundle.get("blockage") or {},
|
| 1627 |
+
"repair_attempts": bundle.get("repair_attempts") or {},
|
| 1628 |
"run_documents": view.get("run_documents") or bundle.get("run_documents") or [],
|
| 1629 |
"validation_metrics": view.get("validation_metrics") or {},
|
| 1630 |
"post_build_validation_status": bundle.get("post_build_validation_status") or {},
|