- Chronic-warning digest sections across all three axes (per-source / per-assignee / per-tag)Closes the named rev-74 next-sprint candidate ('source.chronic_warning digest section'). Until rev 75 the chronic warning was push-loud on Slack (rev 64/70/74) + outbound (rev 64/70/74) + in-app banner (rev 61/64/70) but absent from the daily digest email. Solo founders and email-first operators who didn't have the dashboard tab open and didn't sit in Slack saw daily spikes in the digest but never the chronic warnings β the structural-fix prompt that's most actionable for non-Slack workspaces. Rev 75 closes that gap on every axis where chronic makes sense: new `buildSourceChronicWarningSection`, `buildAssigneeChronicWarningSection`, and `buildTagChronicWarningSection` helpers in `src/lib/digest.ts` render up to 5 chronic alarms per axis with `β³ Nd in a row` + `β‘ ratioΓ` + today $ pills + structural-fix recommendation copy. Amber palette (vs the daily section's red) signals 'different alarm, different operator response β daily acks won't help.' Pre-fetched once per workspace and reused across every owner/admin recipient (workspace-shared, since chronic state is workspace-level diagnostic context). Wired into both the cron path (`runDailyDigest`) and the preview path (`previewDigestForUser`) so admins iterating on configuration see the same surface they'll receive in production. **Strategic significance**: closes the email-channel parity gap on the chronic axis. The chronic alarm cluster now reaches every operator-loaded channel β in-app banner, Slack push, outbound webhook, AND digest email β across all three dimensions where chronic makes sense. The cost-axis story is now end-to-end visible across attribution + alarm + ack + chronic in every channel an operator might be on.
- Chronic-warning summary on TodayPanel for at-a-glance morning visibilityNew `chronicWarnings` aggregate count (sources/assignees/tags) computed in `getDashboardState()` from the existing rev-58/62/67 spike detector returns + rev-72 chronic-ack stamp + workspace.tagChronicAcks JSONB. Rendered as a single brand-amber chip on the rev-33 TodayPanel right below the headline when ANY axis has an active chronic warning. Pure derived state β no schema, no extra round-trip (reuses existing `sourceCostSpikes`, `assigneeCostSpikes`, `tagCostSpikes` from the dashboard payload). Tap the chip to scroll to the matching cost-by-X panel where the rev-72/73 chronic-ack chips + buttons live. Tooltip explains chronic state and the structural-fix vocabulary. **Strategic significance**: until rev 75 the operator's morning glance at TodayPanel showed today's signals/cycles/outputs/spend with day-over-day deltas + 7d baseline + sparkline + projected end-of-day spend β but answering 'is anything *structurally* wrong?' required scrolling to the rev-57 / rev-52 / rev-66 cost panels and inspecting each row's chronic chip. Rev 75 collapses that to a glance. Pairs naturally with the rev-32 cost-spike banner (workspace baseline drift) + rev-21 cost cap warning (hard ceiling) β three layers of cost alarm visibility on the morning-check surface.
- `buildDigestHtml` accepts three new sections + ordered render after daily spikesExtended the digest HTML builder type signature with `sourceChronicWarningSection`, `assigneeChronicWarningSection`, `tagChronicWarningSection`. Render order: chronic sections appear *after* the daily-spike sections so readers see today's spike context first, then the 'and these have been chronic for days' structural follow-up β closes the cognitive gap between 'something happened today' and 'something has been wrong for days.' **Strategic significance**: the digest email now reads as a complete morning report: workspace summary β assigned tasks (rev 25) β unread mentions (rev 31) β stale tasks (rev 48) β personal cost (rev 53) β daily spikes (rev 55/60/63/68) β chronic warnings (rev 75). Six layers of personalised + workspace-shared content covering every read horizon an operator might care about.
- Visual polish β chronic summary chip with focus-visible ring + tactile hover liftNew `.ld-today-chronic-summary` CSS uses the same amber palette as the rev-72 chronic-ack chips so all chronic-axis surfaces read with one consistent visual vocabulary across the dashboard. 1px hover lift + brand-color border emphasis on hover for tactile click affordance. `: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 the rev-75 chip closes a small but real visual-hierarchy gap: until rev 75 the morning chronic state had no surface at the top of the dashboard.