Originally created by: adityaharishch
Summary
Completely rebuilt Meridian's daily summary screen to provide a modern, aesthetic interface that handles both planned and unplanned days. Replaced Vega-based charting with custom SVG components and established a two-layer system where database facts lock task outcomes while AI fills gaps and identifies workstreams.
Key Changes
Core Logic
- Two-layer task matching: database facts (posted worklogs, linked tickets) are deterministic and lock outcomes; AI model fills gaps and points at relevant workstreams
- New
Adherence type with achievement percentage: (earned * 100 + planned) / (planned * 2) with proper rounding
- 30-minute minimum threshold applied consistently across frontend, backend, and themes
- Staleness-triggered auto-refresh (regenerates summaries older than 20 minutes on open)
Schema & Database
- Migration 068: dropped
panels_json, added headline, plan_json, adherence_json, themes_json, evidence_at
- New types:
DaySummaryInsight (text + learned flag), PlanVerdict, Adherence, DayTheme
- Prompt rewritten with tone contract (no "drifted"/"failed"/"wasted"),
**emphasis** formatting, locked pre-matches rule
UI Components (all new)
AchievementRing: signature visualization of plan adherence with done/partial/not-touched segments and percentage
PlanLedger: detailed ledger of planned tasks with outcome glyphs, evidence, time, and certainty indicators
DayShape: no-plan hero showing inferred themes as proportional bands
Insights: unlabelled insight rows with learned items in a separate "Picked up along the way" card
Workstreams: task list filtered to ≥30 minutes with proportional bars and duration
Composing: full-screen generation state with animated progress and step captions
Layout
- Modal card over dimmed blurred backdrop (house overlay pattern)
- Structured sections with labels and proper spacing using new
Section component
- Boxed presentation for lists (plan ledger, workstreams); unboxed for prose (insights, hero)
- Escape-to-close and detail dialog accessible from within the card
Test & Build Status
npm run build: clean
bun test: 332 pass / 0 fail
- No Vega references remain in codebase
- Verified end-to-end on both planned (6→2 done, 2 partial, 2 untouched) and unplanned days
Commits
c679adb0 - feat(summary): rebuild the daily summary around planned vs actual
c3ec7791 - feat(summary): give composing its own screen instead of one static line
76fe559b - refactor(summary): put the daily summary in a card with real structure
🤖 Generated with Claude Code
Originally posted by: coderabbitai[bot]
✨ Finishing Touches
🧪 Generate unit tests (beta)
- [ ] Create PR with unit tests - [ ] Commit unit tests in branch `feat/daily-summary-rebuild`Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
❤️ Share
- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)Comment
@coderabbitai helpto get the list of available commands.Originally posted by: adityaharishch
Thanks for the strict review - addressed all of it in
f99fe5b1(plus a merge ofpre-mainin598abfccthat resolved the conflicts). Summary by finding:Blockers
escalation_attempt_at+escalation_ticket_key, migration073), mirroring the day-task worklog's begin_create/mark_created: a concurrent escalation is refused, a stale claim is re-takeable, and a retry reuses the created/posted key instead of filing a second ticket / posting a second comment.graduate_local_taskis now#[instrument]'d with per-query spans and a summary log, and there are 5 new unit tests (claim won-once/stale-retake/clear, graduate create + match).selectedfirst, only closing the overlay when no ticket detail is open.plannedderivation - dropped the&& summary.plan.lengthAND; it'ssc?.planned ?? falsenow, so a day planned after compose gets the plan screen (the ledger may lag one recompose, which is the right screen vs. the no-plan one).generate/generateNownow capture the day and bail before everysetStateif the user navigated away (via adayRef), plus a sharedcomposingre-entry guard.Design concern
daily_planretention - kept intentional, now documented explicitly inproviders/mod.rs: scoping to a recency window would break historical plan/worklog title resolution for older tickets, and the growth is human-paced (planned tasks/day), not ticket-churn-driven. Confirmed as the intended tradeoff rather than silently unbounded.Migration must-fixes (done while unreleased - these migrations were also renumbered above pre-main's 068/069, which otherwise collided after the merge and would break the sqlx migrator)
insights_jsoncomment fixed to{title, text}.themes_jsoncomment now says it's unused/wire-back-compat only;plan_jsoncorrected to binary done/not_touched.Minors
board.rssnapshot fallback nowwarn!s at the failure boundary instead of.ok().flatten().task_detail.rsdoc updated -local_worklog_textis also carried onto a real ticket on escalation.EscalateResponsemoved toapi-types.ts.hoveredstate removed; orphanedCleanupModalimport +cleanupIssueCountdestructure commented out alongside the disabled feature.main.rsday-summary CLI +DAILY_SUMMARYprompt doc.composingre-entry guard from [#4].Not changed (informational):
DatePicker.tsxhas no live entry point because Board Cleanup is intentionally hidden this release - flagging as expected, not manually verifiable end-to-end until that re-enables.All green locally: fmt + clippy (workspace + tray), full
cargo test,uibuild, andbun test(348 pass). Pre-push suite passed on the push.Related
Tickets:
#4Ticket changed by: adityaharishch