- Per-source quietness section in the daily digest email — closes the named rev-145 next-sprint candidate on the email channelNew `buildSourceQuietnessSection()` helper renders up to 5 quiet feeds with `🌙 Nd silent` pills + cadence label + last-polled fact + per-feed recommendation copy. Workspace-shared (every owner/admin recipient sees the same list since 'this feed is structurally silent' is workspace-level diagnostic context). Skips ack-muted feeds (the rev-145 7-day TTL) so a triaged source doesn't keep showing up in the daily email. Pre-fetched once per workspace via the rev-144 `getSourceQuietnessOverview()` and reused across every recipient. Wired into both the cron production loop (`runDailyDigest`) and the rev-36 admin preview path (`previewDigestForUser`) so admins iterating on configuration see the same surface they'll receive in production. Rendered alongside the rev-75 chronic-warning sections — both are workspace-shared structural-alarm horizons, distinct vocabularies (chronic-cost vs absent-signal). Closes the structural-alarm cluster's third axis on the email channel — chronic-cost (rev 75 source/assignee/tag) + chronic-quietness (rev 146 sources). Solo founders + email-first operators who don't have the dashboard tab open and don't sit in Slack now get the same heads-up.
- Bulk per-source quietness ack — closes the named rev-145 next-sprint candidate at the bulk-action axisNew `bulkAcknowledgeSourceQuietness()` helper + `POST /api/sources/quietness-ack/bulk` route + matching `POST /api/v1/sources/quietness-ack/bulk` v1 mirror in lockstep + `SourceQuietnessBulkAck` client component mounted inside the rev-142 source cadence summary block beside the rev-144 'N quiet' stat when 2+ feeds are quiet AND at least one isn't already ack-muted. One click acks every visible quiet source for the rev-145 7-day TTL — the most common operator triage decision when the rev-146 morning digest lands with multiple dormant feeds is 'mute them all and review next quarter' rather than 'decide each one individually.' Caps at 50 source IDs per call. Mirrors the rev-87 source chronic bulk-ack pattern at the structural-quietness horizon — same 7-day TTL, same per-item closure-receipt fan-out so downstream integrations see the same shape they get from a single ack. Closes the inline-vs-batch ack symmetry on the structural-quietness axis (rev 145 single + rev 146 bulk).
- v1 mirror + dashboard polish — brand-amber bulk-ack chip palette consistent with rev-145 single ackBearer-auth `POST /api/v1/sources/quietness-ack/bulk` mirrors the rev-146 dashboard endpoint exactly. Indexed in `/api/v1` self-describing index. New `.ld-source-quietness-bulk-ack` CSS uses the same brand-amber palette (`rgba(207, 108, 58, *)`) as the rev-145 single ack so the structural-quietness ack vocabulary is uniform regardless of single vs bulk shape, but slightly tighter padding so the chip reads as a sibling to the rev-142 cadence summary stat chips alongside it rather than a primary action. Brand-color teal `is-success` state mirrors the rev-145 single-ack flash on the same surface. New `:focus-visible` outline ring matches the rev-38 dashboard accessibility pattern so keyboard-only operators land cleanly. Cumulative micro-polish (every rev 22+ has carried at least one) — and rev 146's polish is load-bearing because it surfaces the bulk-action affordance at the highest-attention dashboard moment (the morning glance at the rev-142 cadence summary block).
- OpenAPI 3.1 typed coverage on the rev-146 endpoint — 68th unbroken cadence revCloses the typed-contract gap on the rev-146 v1 endpoint in the same cycle the dashboard primitive ships. The OpenAPI spec types the new POST `/sources/quietness-ack/bulk` endpoint with full request schema (sourceIds[≤50] required, min 1) + response schema (ok + acknowledgedCount + acknowledgedSources[]). 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 68th unbroken rev with rev 146. The OpenAPI spec changelog header gains a rev-146 block explaining the bulk-action axis closure on the per-source quietness surface. MCP-host code generators reading the OpenAPI spec see a typed contract for the rev-146 bulk-ack primitive immediately. The per-source observability cluster on v1 now closes the inline-vs-batch ack symmetry at the structural-quietness axis (rev 145 single + rev 146 bulk) just as it had previously closed it on the chronic-cost axis (rev 72 single + rev 87 bulk).