Originally created by: Akarsh-Hegde
Promotes 60 commits (~21 PRs, [#417]–#439) from pre-main to main. main ⊆ pre-main invariant holds (verified via git merge-base --is-ancestor); CI is green on pre-main HEAD (9250bfbd). Six threads:
1. Design system — SF Pro + violet accent (#439, plus 3 follow-up fixes)
ui/lib/brand-icons.ts)..gitignore reference + an em-dash in UI copy, fixed a CSS comment that broke the Turbopack build, and swapped an em-dash for a plain hyphen in the dashboard window title.2. Auth — Clerk email sign-in (#436)
identify() on sign-in.3. Update/release safety (#438, [#435])
4. Onboarding & uninstall (#432, [#418], [#420], [#425])
src/uninstall.rs).5. Tray, popover & daily-plan UX (#437, [#429], [#428], [#431], [#433])
src/daily_plan.rs), holding the nudge for 1h after auto-open.meridian-a11y-helper Accessibility TCC entry.6. Analytics, DMG polish & housekeeping (#427, [#430], [#426], [#424], [#434])
CLAUDE.md that PRs target pre-main and main is maintainer-only (the rule this very PR follows).App version (Cargo.toml / npm/meridian/package.json) is 1.70.0 on both branches — no regression. The MLX runtime version (services/pyproject.toml) is also 1.70.0 on both, matching runtime-staging (already published at 1.70.0). runtime-latest is stale at 1.68.0 (predates this entire batch) — merging will let main's auto-publish gate (scripts/runtime-publish-gate.sh) fire and publish 1.70.0 to runtime-latest. That publish job runs in the production-runtime GitHub Environment and needs a required reviewer to approve it before it ships to users.
No new SQL migrations in this batch.
Each commit reports its own verification in-message (cargo build/clippy -D warnings/test, tsc --noEmit, next build, bun test), and CI (Build MLX runtime + CI) is green on pre-main HEAD 9250bfbd. Before merging this PR:
cargo test (workspace) passes on main post-mergecargo clippy -- -D warnings cleancd ui && npm run build && npm test cleancd tray/src-tauri && cargo test cleanproduction-runtime publish job once it queues, so runtime-latest moves off the stale 1.68.0 build.app bundle / OS integration to exercise fully)🤖 Generated with Claude Code
Tickets: #416
Tickets: #417
Tickets: #418
Tickets: #420
Tickets: #424
Tickets: #425
Tickets: #426
Tickets: #428
Tickets: #429
Tickets: #430
Tickets: #431
Tickets: #433
Tickets: #434
Tickets: #435
Tickets: #445
Tickets: #446
Tickets: #447
Originally posted by: coderabbitai[bot]
📝 Walkthrough
## Walkthrough This PR adds daily Plan automation, Clerk sign-in, PostHog analytics, scoped uninstall support, mandatory updates, daemon-only installation, signed and notarized DMGs, notification permissions, deep-link handling, provider-cache retention, design-system packaging, and UI redesign changes. ### Changes **Planner, account, and tray workflows** |Layer / File(s)|Summary| |---|---| |**Daily Plan automation**`meridian-core/...`, `src/daily_plan.rs`, `tray/src-tauri/src/poll/...`|Shared markers coordinate daily Plan auto-opening, dismissal restamping, and nudge hold-back behavior.| |**Sign-in and analytics**
`tray/src-tauri/src/analytics.rs`, `tray/src-tauri/src/commands/account.rs`, `ui/app/setup/signin/*`|Clerk email sign-in and persistence connect to PostHog installation, usage, and identity events.| |**Deep links and permissions**
`tray/src-tauri/src/deep_link.rs`, `tray/src-tauri/src/commands/*`, `ui/app/setup/*`|Pending dashboard navigation, notification permissions, setup flow changes, and window focus handling are wired into the tray and UI.| **Uninstall and updates** |Layer / File(s)|Summary| |---|---| |**Scoped uninstall**
`src/uninstall.rs`, `tray/src-tauri/src/commands/uninstall.rs`, `ui/app/uninstall/page.tsx`|The CLI and tray wizard support selectable data, runtime, and model removal with JSON planning and results.| |**Mandatory update enforcement**
`tray/src-tauri/src/update.rs`, `scripts/package-updater.sh`|Release manifests carry minimum versions, and the tray periodically installs updates below the configured floor.| **Release, providers, and UI** |Layer / File(s)|Summary| |---|---| |**DMG signing and packaging**
`.github/workflows/*`, `scripts/*`, `tray/package.json`, `tray/src-tauri/tauri.conf.json`|Release jobs inject build settings, generate DMG assets, sign the daemon, notarize artifacts, clean temporary credentials, and verify bundles.| |**Provider and worklog handling**
`src/intelligence/providers/*`, `src/pm_worklog/*`|Worklogged tasks are retained and Jira backfill, issue-type fallback, self-assignment, and terminal posting errors are added.| |**Design system and UI styling**
`ui/app/globals.css`, `ui/lib/brand-icons.ts`, `ui/STYLESHEET.md`, `packages/meridian-design-system/*`, `tray/src/style.css`|System fonts, violet tokens, shadows, brand resolution, design-system exports, and preview assets are added or standardized.| **Estimated code review effort:** 5 (Critical) | ~120 minutes **Possibly related PRs** - [[Meridiona/meridian#352](https://github.com/Meridiona/meridian/issues/352)](https://github.com/Meridiona/meridian/pull/352): Overlaps with removal of the `MustFixBanner` surface. - [[Meridiona/meridian#384](https://github.com/Meridiona/meridian/issues/384)](https://github.com/Meridiona/meridian/pull/384): Touches the tray popover and dashboard window wiring. - [[Meridiona/meridian#427](https://github.com/Meridiona/meridian/issues/427)](https://github.com/Meridiona/meridian/pull/427): Overlaps with the tray PostHog analytics implementation. **Suggested reviewers:** `adityaharish` **Poem** > Violet paths through dawn unfold, > A rabbit hops where plans are told. > Clerk and analytics softly run, > Signed DMGs greet the morning sun. > Worklogs stay, old clutter clears— > I twitch my nose and cheer!
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
| Check name | Status | Explanation | | :------------------------: | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Title check | ✅ Passed | The title clearly and concisely describes the main change: promoting pre-main to main. | | Description check | ✅ Passed | The description is mostly complete, with a clear summary, testing notes, version notes, and merge context, though it does not fully follow the template headings. | | Docstring Coverage | ✅ Passed | Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. | | Linked Issues check | ✅ Passed | Check skipped because no linked issues were found for this pull request. | | Out of Scope Changes check | ✅ Passed | Check skipped because no linked issues were found for this pull request. |✨ Finishing Touches
🧪 Generate unit tests (beta)
- [ ] Create PR with unit tests - [ ] Commit unit tests in branch `pre-main`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: coderabbitai[bot]
Originally posted by: Akarsh-Hegde
Review follow-up — all 21 threads addressed
Went through every CodeRabbit thread on this promotion PR. All are now resolved. Because this is a
pre-main → mainpromotion (head =pre-main, which we don't push to directly), the fixes land via two PRs intopre-main; once those merge, this PR's diff picks them up automatically.Fix PRs (target
pre-main):--purgefull-wipe scope bug (critical), the github/linear FK-safe prune, jira/azurereqwesttimeouts, thesave_account_emailPII-in-traces fix,.contexton DB calls,warn!→error!on failure paths, plus the approved refactors (splituninstall.rs,Plan/Flagsstruct, sharedfs_utils::atomic_write_json, theimport-apple-certcomposite action) and the UI fixes (resend-ticker teardown, Clerkcatchblocks, privacy copy,BrandIcontype, em-dashes).Deliberately not changed (commented on the threads):
commands.rs/api-types.ts/ui_events.rs"missing header" findings — the header is already on line 1 (CodeRabbit anchored mid-file).CLAUDE.md"afterward" locale nit — docs file, not user-facing app text.⚠️ Merge order: this PR is not ready to merge yet — #445 and [#446] must merge into
pre-mainfirst, then this promotion diff will reflect the fixes. I can't merge those (human-only per the repo rules). Once they're in and CI is green onpre-mainHEAD, this one is good to go.Related
Tickets:
#446Ticket changed by: Akarsh-Hegde