You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Unify the collector-health ROW banding (NEVER_RUN/FAILING/STALE/WARNING/HEALTHY) — currently defined in three places #1573
Surfaced during the #1562 data-layer build. The per-server CARD banding (CPU/threads/memory/blocking/deadlocks/collectors + freshness) is now unified in PerformanceMonitor.Common/ServerHealthBands.cs (ServerHealthClassifier) and consumed by the WPF viewer, the web fleet reader, and the new get_fleet_overview MCP tool — one set of thresholds, drift closed.
The collector-health row banding is a different, larger classifier that still exists in three independent copies: Lite's collection-health surface, the Darling WPF viewer's, and the service's DarlingDataReader.CollectorHealth (NEVER_RUN / FAILING / STALE / WARNING / HEALTHY per collector row). They agree today; nothing pins them together, so they can drift exactly the way the card thresholds could before unification.
Scope of the fix: extract one row classifier (Common, brush/display-free), refactor all three consumers onto it, keep each surface's display formatting local, pin with a shared decision-table test. Entangled with WPF display-string formatting on both viewer sides, which is why it was consciously not folded into #1562's build.
Scope addition from the #1574 merge gate: the cross-app MCP inventory pin caught get_fleet_overview (born from the web dashboard's DarlingFleetReader) with no Lite twin — it is now on the KnownLiteMissingMcpTools ratchet with a pointer here. The Lite port belongs to this issue's unification work: a DuckDB fleet reader over the SAME shared ServerHealthClassifier in Common, which is also the moment to move Lite's own overview-card banding onto that classifier (currently Lite-side thresholds — the same pre-unification drift the Darling viewer had). Port the tool, remove the ratchet entry (it only shrinks).
Shipped to dev in #1578. Collector-health ROW banding is unified into one PerformanceMonitor.Common classifier (CollectorHealthClassifier) that Lite, the Darling viewer, and the service all delegate to — no more three-way drift. Thresholds are now frequency-relative: FAILING at max(24h, 2x cadence), STALE at max(4h, 1.5x cadence), so a healthy daily collector (index_object_stats, 1440-min) reads HEALTHY at 27h instead of FAILING, and the Overview 'N failing' count (which reuses this banding) stops showing phantom failures. Floors keep every frequent collector's banding byte-for-byte identical. 40 decision-table tests mirrored in both apps. NOTE: a 4th, SQL-side copy exists in the deprecated Dashboard (install/47) with different semantics and can't consume the C# classifier - out of scope, flagged in the PR.
Activity
erikdarlingdata commentedon Jul 18, 2026
Scope addition from the #1574 merge gate: the cross-app MCP inventory pin caught get_fleet_overview (born from the web dashboard's DarlingFleetReader) with no Lite twin — it is now on the KnownLiteMissingMcpTools ratchet with a pointer here. The Lite port belongs to this issue's unification work: a DuckDB fleet reader over the SAME shared ServerHealthClassifier in Common, which is also the moment to move Lite's own overview-card banding onto that classifier (currently Lite-side thresholds — the same pre-unification drift the Darling viewer had). Port the tool, remove the ratchet entry (it only shrinks).
Lite pin: ratchet-list get_fleet_overview (Darling-only until the #1573…
Unify collector-health ROW banding + fix daily-collector false-positi…
Merge pull request #1578 from erikdarlingdata/feature/1573-collector-…
erikdarlingdata commentedon Jul 18, 2026
Shipped to dev in #1578. Collector-health ROW banding is unified into one PerformanceMonitor.Common classifier (CollectorHealthClassifier) that Lite, the Darling viewer, and the service all delegate to — no more three-way drift. Thresholds are now frequency-relative: FAILING at max(24h, 2x cadence), STALE at max(4h, 1.5x cadence), so a healthy daily collector (index_object_stats, 1440-min) reads HEALTHY at 27h instead of FAILING, and the Overview 'N failing' count (which reuses this banding) stops showing phantom failures. Floors keep every frequent collector's banding byte-for-byte identical. 40 decision-table tests mirrored in both apps. NOTE: a 4th, SQL-side copy exists in the deprecated Dashboard (install/47) with different semantics and can't consume the C# classifier - out of scope, flagged in the PR.
Make the server stale band honor each collector's own cadence (erikda…