- Per-source quietness detector โ closes the named rev-143 next-sprint candidateNew `computeSourceQuietness()` + `getSourceQuietnessOverview()` helpers identify pollable feed-style sources that polled successfully but produced no signals beyond the staleness threshold. Threshold is max(14d workspace floor, 2ร cadence-interval-in-days) capped at 90d so a 1-hour-cadence feed needs ~14 days of silence to register quiet but a daily feed gets the same 14-day floor (a daily feed silent for 25 hours is normal). Distinct from rev-16 loud failure (lastErrorMessage), rev-58 cost-spike (loud cost), and rev-12 7-day signal counter (descriptive). Quietness is the *prescriptive* answer that load-bearing-feed-or-not can be answered without reading every source row by hand. Closes the named rev-143 next-sprint candidate.
- Dashboard ๐ quiet chip on every quiet source row + workspace-wide quiet count on the rev-142 cadence summaryEvery pollable source whose quietness threshold has been crossed gets a slate-palette `๐ quiet Nd` pill inline in the rev-1 source row pill cluster, with a `cursor: help` tooltip carrying the full reason (days since last signal + days since last poll + recommendation). The rev-142 cadence summary block above the source list gains a `N quiet` stat alongside the existing pollable / on-workspace-cadence / with-override / due-now stats so operators see structural silence at the same vertical position as structural cadence. Slate palette distinct from rev-142 brand-color cadence pills, rev-58 brand-red cost pills, and rev-16 brand-red error pills so the four observability axes (cadence / quietness / cost / health) read at distinct attention levels.
- GET /api/v1/sources/quietness โ protocol-bound aggregate read in lockstep with the dashboard primitiveNew bearer-auth aggregate endpoint returns workspace cadence floor + per-source breakdown of quiet feeds sorted by daysSinceLastSignal descending so the silentest sources surface first. Empty perQuietSource array when no feed crosses the staleness floor (the steady state on a healthy workspace). Pairs with `/api/v1/sources` (rev 13 + rev 142 + rev 143 pollGating projection) + `/api/v1/sources/cadence-overview` (rev 142) as the third axis on the per-source health observability cluster on the protocol-bound surface. The cadence pattern from rev 37 onward (every dashboard primitive ships with a v1 mirror in the same cycle) holds unbroken into rev 144.
- OpenAPI 3.1 typed coverage on /sources/quietness โ 66th unbroken cadence revOpenAPI spec types the new endpoint with full request/response schemas (workspaceLoopMinutes, totalSources, pollableSources, quietSources, staleFloorDays, perQuietSource[] with full per-source shape including ISO date-time formats on lastSyncedAt + lastSignalAt). The cadence pattern from rev 78 onward (every v1 enhancement gets typed in the OpenAPI 3.1 spec in the same cycle it ships) reaches its 66th unbroken rev with rev 144. The OpenAPI spec changelog header gains a rev-144 block explaining the third-axis closure on the per-source observability cluster. The `/api/v1` self-describing endpoint index also documents the new endpoint inline so MCP-host integrators reading the index discover it without opening the spec.