`GET /api/plugins/holographic/curation/runs` — recent standalone automation backend runs, loaded from the append-only project sidecar ledger.
(
State(state): State<DashboardState>,
JsonQuery(params): JsonQuery<LimitParams>,
)
| 397 | /// `GET /api/plugins/holographic/curation/runs` — recent standalone |
| 398 | /// automation backend runs, loaded from the append-only project sidecar ledger. |
| 399 | pub(crate) async fn curation_runs( |
| 400 | State(state): State<DashboardState>, |
| 401 | JsonQuery(params): JsonQuery<LimitParams>, |
| 402 | ) -> Json<Value> { |
| 403 | let limit = coerce_limit(params.limit, 50, 200) as usize; |
| 404 | match crate::automation::run_ledger::load_run_records(&state.dashboard_root, limit).await { |
| 405 | Ok(records) => { |
| 406 | let count = records.len(); |
| 407 | Json(json!({ |
| 408 | "records": records, |
| 409 | "count": count, |
| 410 | "limit": limit, |
| 411 | "error": "", |
| 412 | })) |
| 413 | } |
| 414 | Err(err) => Json(json!({ |
| 415 | "records": [], |
| 416 | "count": 0, |
| 417 | "limit": limit, |
| 418 | "error": err.to_string(), |
| 419 | })), |
| 420 | } |
| 421 | } |
| 422 | |
| 423 | /// `GET /api/plugins/holographic/fact-proposals` — session-reflector fact |
| 424 | /// proposals awaiting approval, plus historical applied/rejected decisions. |
nothing calls this directly
no test coverage detected