- Per-source scheduled-pause digest section — closes the named rev-150 next-sprint candidate at the email channelRev 150 shipped the per-source scheduled-pause write primitive + auto-resume sweep + dashboard chip + v1 PATCH mirror, but the email channel was missing — solo founders + email-first operators who scheduled-paused N feeds via the dashboard had no morning reminder of 'your X feeds resume in M hours.' Rev 151 closes that with a new `buildSourcePauseUntilSection()` helper in `src/lib/digest.ts` that renders up to 6 rows with calm brand-amber `⏰ resumes in Nh` (or 'in Nd' for windows beyond 48h) pills + type chip + auto-resume copy. Workspace-shared (every owner/admin recipient sees the same list since 'these feeds are scheduled-paused' is workspace-level config context, not per-recipient inbox state). Pre-fetched once per workspace via `getScheduledPausedSources()` and reused across every recipient. Wired into both `runDailyDigest` (cron production path) and `previewDigestForUser` (rev-36 admin testing path) so admins iterating on configuration see the same surface they'll receive in production. Distinct vocabulary from the rev-146 quietness section — quietness is a structural alarm, scheduled-pause is operator intent.
- PauseUntilSummary chip on TodayPanel for at-a-glance morning visibilityNew ⏰ chip on the rev-33 TodayPanel below the rev-147 quietness chip + rev-75 chronic chip. Renders only when ≥1 source is scheduled-paused. Tap to scroll to the rev-1 sources panel where the rev-150 per-row chip + popover live for adjustment. Calm brand-amber palette `rgba(207,108,58,*)` distinct from the rev-147 slate quietness chip + rev-75 amber-on-amber chronic chip + rev-32 brand-red cost-spike alarm so operators read the four structural-state horizons at four distinct attention levels. Scheduled-pause is operator intent (you set this on purpose) rather than an alarm, so the visual hierarchy stays calm — no pulsing dot, no urgent red, just an ambient affordance. Closes the today-glance axis on the rev-150 primitive in lockstep with the email channel.
- GET /api/v1/sources/scheduled-paused — protocol-bound aggregate read in lockstepNew bearer-auth aggregate read endpoint returns workspace-wide list of all sources whose `pausedUntilAt` is set AND still in the future, sorted by resume-soonest first so MCP hosts rendering 'your N feeds resume in M hours' surface the most-imminent first. Each row carries `sourceId`, `label`, `type`, `pausedUntilAt` ISO, `hoursUntilResume`. Pure read of the rev-150 column — no schema cost, no migration. Distinct from /sources/quietness (rev 144 — structural-alarm axis) and /sources/cost-spikes (rev 58 — cost-spike-alarm axis). Scheduled-pause is the operator-intent axis. The rev-150 PATCH /sources/{id}/pause-until + rev-151 GET /sources/scheduled-paused together give the MCP server's per-source-pause tooling the full read + write lifecycle on the protocol-bound surface.
- OpenAPI 3.1 typed coverage on the rev-151 endpoint — 73rd unbroken cadence revThe OpenAPI spec types the new GET `/sources/scheduled-paused` endpoint with full response schema (totalScheduledPaused integer + perScheduledPaused array of typed rows including pausedUntilAt date-time format and hoursUntilResume integer). 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 73rd unbroken rev with rev 151. The OpenAPI spec changelog header gains a rev-151 block explaining the today-glance + email-channel + protocol-bound axes closure on the rev-150 primitive. The `/api/v1` self-describing endpoint index documents the new endpoint inline. MCP-host code generators reading the spec see typed contracts for the rev-151 read primitive immediately.