@@ -3793,25 +3793,47 @@ def _aggregate(root_id: str) -> tuple[int, int, int]:
37933793 counts = raw if isinstance(raw, dict) else {}
37943794 except Exception:
37953795 counts = {}
3796+
3797+ def _coerce_ledger_count(raw: Any) -> Optional[int]:
3798+ try:
3799+ return int(raw)
3800+ except Exception:
3801+ return None
3802+
3803+ def _ledger_len_from_store(rid: str) -> Optional[int]:
3804+ count_fn = getattr(ledger_store, "count", None)
3805+ if callable(count_fn):
3806+ direct = _coerce_ledger_count(count_fn(rid))
3807+ if direct is not None:
3808+ return direct
3809+ try:
3810+ records = ledger_store.list(rid)
3811+ except Exception:
3812+ return None
3813+ return int(len(records) if isinstance(records, list) else 0)
3814+
37963815 for item in items:
37973816 rid = str(item.get("run_id") or "").strip()
37983817 if not rid:
37993818 continue
38003819 if rid in counts:
3820+ ledger_len = _coerce_ledger_count(counts.get(rid))
3821+ if ledger_len is None:
3822+ ledger_len = _ledger_len_from_store(rid)
3823+ else:
3824+ ledger_len = _ledger_len_from_store(rid)
3825+
3826+ status0 = str(item.get("status") or "").strip().lower()
3827+ if ledger_len == 0 and status0 in {"completed", "failed", "cancelled"}:
3828+ # Defensive fallback: some older/newer LedgerStore implementations
3829+ # can return 0 for terminal runs even when ledger rows are present.
38013830 try:
3802- item["ledger_len"] = int(counts.get(rid) or 0)
3831+ ledger_entries = ledger_store.list(rid)
3832+ if isinstance(ledger_entries, list):
3833+ ledger_len = int(len(ledger_entries))
38033834 except Exception:
3804- item["ledger_len"] = None
3805- continue
3806- try:
3807- count_fn = getattr(ledger_store, "count", None)
3808- if callable(count_fn):
3809- item["ledger_len"] = int(count_fn(rid))
3810- else:
3811- records = ledger_store.list(rid)
3812- item["ledger_len"] = int(len(records) if isinstance(records, list) else 0)
3813- except Exception:
3814- item["ledger_len"] = None
3835+ pass
3836+ item["ledger_len"] = ledger_len
38153837
38163838 return {"items": items}
38173839
0 commit comments