- Per-source pause-until daily Slack push — closes the named rev-151 next-sprint candidate at the chat-channel axisRev 150 shipped the per-source schedule write + auto-resume sweep, rev 151 shipped the today-glance chip + email digest section + v1 read endpoint — but Slack-first teams whose operators set scheduled pauses had no morning chat-channel reminder of 'your N feeds resume in M hours.' Rev 152 closes that with a new `buildSourcePauseUntilSlackPayload()` Slack block + `pingSourcePauseUntil()` daily sweep wired into `runDailyDigest()` mirroring the rev-145 quietness sweep shape exactly. Header `:alarm_clock: Per-source scheduled pause` + lists each scheduled-paused source with calm brand-amber `resumes in Nh` (or 'in Nd' for windows beyond 48h) lines + auto-resume copy. Rate-limited via the new `source_pause_until_warning` activity-log kind to once per workspace per 24h with the same dead-Slack-webhook auto-clear path as rev-58 cost-spike + rev-74 chronic-warning + rev-145 quietness. Hidden when no source is scheduled-paused — quiet-day desks see no clutter. Distinct vocabulary from rev-145 quietness Slack push (structural alarm) — pause-until is operator intent (you set this on purpose), so the message reads as a forward-looking lifecycle preview rather than a call-to-action.
- New outbound source.pause_until_warning event in lockstep with the Slack pushNew `OutboundEvent` value `source.pause_until_warning` + `dispatchSourcePauseUntilWarningWebhook()` dispatcher fires alongside the Slack push so external integrations (FinOps tool tracking source uptime, project tracker grouped by source-pause windows, CRM mirroring source state) reconcile 'operator scheduled this pause' without polling the dashboard. Payload mirrors the rev-151 `GET /api/v1/sources/scheduled-paused` response shape exactly so an MCP host wiring this event to a downstream integration gets the same `scheduledPaused[]` shape it already sees on the read endpoint. Closes the rev-151 named candidate on the protocol-bound side — the rev-150 scheduled-pause primitive now reaches every operator-loaded channel (in-app rev-151 chip + email rev-151 digest + chat rev-152 Slack + protocol rev-151 GET + rev-152 outbound).
- Activity log glyph + brand-amber tint for the new source_pause_until_warning kindActivity log gains a ⏰ glyph + brand-amber per-kind tint (`rgba(207,108,58,*)`) on every `source_pause_until_warning` row so operators reading the log scan the per-source axes (cost / chronic-spike / quietness / pause-until) at four distinct attention levels without parsing copy. The ⏰ glyph matches the rev-151 today-glance chip + rev-150 dashboard chip exactly so the activity log + dashboard + digest all speak one pause-until vocabulary. Brand-amber palette distinct from the rev-145 slate quietness palette (structural alarm) — pause-until is operator intent (calm forward-looking lifecycle preview), so the eye reads it at a different attention level than alarm-driven kinds.
- OpenAPI 3.1 typed coverage on the rev-152 outbound event — 74th unbroken cadence revThe OpenAPI spec changelog header gains a rev-152 block explaining the chat-channel axis closure on the rev-150 scheduled-pause primitive. 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 74th unbroken rev with rev 152. The pause-until primitive on v1 is now four axes deep (write rev 150 PATCH + read rev 151 GET + email channel rev 151 + chat channel rev 152) with full OpenAPI typed coverage on every axis. MCP-host code generators reading the spec see typed contracts for the rev-152 push primitive immediately. The rev-150 PATCH + rev-151 GET + rev-151 daily-digest + rev-152 Slack + rev-152 outbound together give the rev-150 scheduled-pause primitive a complete five-channel lifecycle on the protocol-bound + operator-loaded surfaces.