Menu

#528 release: promote pre-main to main (auth gate, GitHub connect flow, tracker choice, tray/capture fixes, CI pipeline overhaul)

closed
nobody
None
2026-07-21
2026-07-21
Anonymous
No

Originally created by: Akarsh-Hegde

Summary

Promotes pre-main (staging, verified end-to-end on the staging DMG channel) to main (production). 24 commits across 5 merged feature/fix PRs plus the two standalone hotfixes that landed after the last one, spanning auth, integrations, worklog routing, tray reliability, capture stability, and the CI/release pipeline itself.

⚠️ Merge conflicts expected — read before merging

git merge-tree against the current tips shows real conflicts in 3 files, all CI/release-pipeline config: .github/workflows/ci.yml, .github/workflows/release-prepare.yml, .releaserc.json. Everything else (Cargo.lock, Cargo.toml, tray/src-tauri/Cargo.toml, tray/src-tauri/src/commands/integrations.rs, ui/lib/integrations.ts) auto-merges cleanly.

Root cause: main picked up its own direct CI hotfixes after the last two release PRs (#517, [#522] — the squash-merge incident described in release-prepare.yml) that were never backported to pre-main. Both branches then independently rebuilt large chunks of ci.yml (the Silicon-only single-Rust-job redesign) in near-identical but not textually identical ways, so the same regions collide.

Please resolve manually (merge commit, not squash — see the note in commit afb5e631 and release-prepare.yml's own guard) and preserve pre-main's side on:

  • ci.yml: cache save-if should target pre-main (not main) and keep add-job-id-key: false / shared-key: ci-macos-silicon — that's a deliberate change from pre-main (perf(ci) [#514]/#515 follow-up) so PRs go warm without waiting for a release. Also keep the bumped screenpipe MIT-pin hash (064c44cc…, from [#524]) over main's older 825b038d….
  • release-prepare.yml: main independently added a loud-failure guard ("no releasable commits on main" / squash-merge warning, from the [#517]/#522 incident fix) that pre-main never received — make sure conflict resolution keeps that guard, it's a real regression risk if dropped.
  • .releaserc.json: main deliberately dropped the [skip ci] marker from the release commit message (see release-prepare.yml's comment on why); keep that removal.

What's shipping

Auth

  • feat(auth): make sign-in compulsory across dashboard and tray popover (#520) — RequireSignIn now gates the whole dashboard behind a live Clerk session, re-locking immediately on sign-out; the vanilla-JS tray popover mirrors the lock via get_account_email (re-checked on window focus) and routes its CTA to the dashboard's sign-in screen, since it can't host Clerk directly. README and dashboard metadata copy refreshed to match.

Integrations

  • feat(ui): streamline the GitHub connect flow (#510 — 389f1996, 36d2baba, a7160764) — reworked device-flow and PAT connect UX in IntegrationConnect.tsx/integrations.ts: copy button flips to "✓ Copied" for 1.5s, three-numbered-step code entry, a guided device-flow checklist, project-picker continuity across reconnects, and a fix for a latched discovery error. Includes an em-dash → plain-hyphen fix in the PAT reload warning (user-facing text rule).
  • feat(worklog): choose which tracker a proposed ticket is created on (#507 — f3ebc02c, e36e605e) — proposed worklog tickets no longer always land on config.pm_providers.first() (previously always Jira when both Jira and GitHub were connected); the task card's provider corner-icon now reflects the actual choice. Added test coverage for the toolbar's multi-provider "Connected" pill.

Tray reliability

  • fix(tray): reconcile a stale daemon_quiet notice on tray restart (#519 — ac8c073d, 1e1ad198) — fixes a field-reported bug where the "Meridian went quiet" banner could get stuck forever with no way to clear it short of a manual DB delete; adds an end-to-end DB-backed regression test.
  • fix(tray): match PostHog daily_usage to dashboard stats, make sends retry-safe (#505 — 7cd3f720) — daily_usage now computes focus_hours/coding_hours/logged_hours/drafts_count identically to the dashboard's Today card (previously focus_hours read a different field and coding_hours didn't exist); sends only advance on a confirmed PostHog 2xx, so failures retry instead of silently dropping; added a single-flight guard against overlapping ticks; removed the now-redundant person_identified event.

Capture

  • fix(capture): bump screenpipe-fork to disable sck-rs on every macOS version (#524 — d4e467b6, ddcb6212) — follow-up to the macOS 26 sck-rs double-free/abort fix, extending the disable to every macOS version rather than gating it to 26+; bumps the screenpipe MIT-pin guard's expected hash accordingly (two Meridiona-authored commits, no upstream merge past the MIT cutoff).

CI / release pipeline

This cycle also carried substantial work on the release pipeline itself — the reason the conflict section above matters:

  • ci: new prepare + tag-triggered two-workflow release pipeline (#508), made staging auto-cut on every pre-main push without a commit-message marker (#511, [#512]), fixed the staging build not actually firing / not compiling / notarizing with blank creds (#513, [#516]), warmed the release cache and skipped staging notarization for speed (#514), migrated production onto the same Silicon-only two-workflow pipeline (#515), fixed the tag-triggered push losing its token binding + a template-injection finding from CodeRabbit review (#518), and stopped re-running the full CI suite on pre-main → main release PRs since main holds nothing pre-main lacks except version bumps (#521).
  • Net effect: both staging and production releases are now on the same fast (~sub-10-minute), Silicon-only, tag-triggered pipeline, with the squash-vs-merge-commit failure mode from [#517]/#522 now caught loudly (on main, this exact PR is where that guard needs to survive — see the conflict note above).

Test plan

  • [x] Each commit above already passed CI on its own feature PR into pre-main, and again on the push to pre-main.
  • [x] pre-main has been running on the staging DMG auto-update channel.
  • [ ] Resolve the three flagged conflicts (merge commit, not squash) before merging.
  • [ ] After merge, confirm release-build.yml actually fires off the tag main's release-prepare.yml cuts (the exact failure mode [#513]/#518 exist to prevent).

Summary by CodeRabbit

  • New Features
  • Added required sign-in gating for dashboard and tray, including a sign-in lock overlay.
  • Enabled selecting a destination board/provider for proposed worklogs (including drafting/proposals).
  • Added guided GitHub connection flow with board selection timing and retry on discovery failure.
  • Bug Fixes
  • Improved tray health reconciliation and made daily analytics reporting reliably retryable.
  • Refined local personal-task status handling and improved notice-clearing feedback.
  • Documentation
  • Updated Meridian product copy and metadata descriptions.
  • CI / Release
  • Reworked release pipelines (prepare/build/publish), added macOS release cache warming, tightened CI triggers, and improved updater manifest/rolling-channel publishing.

Related

Tickets: #512
Tickets: #513
Tickets: #514
Tickets: #516
Tickets: #517
Tickets: #522
Tickets: #524
Tickets: #530
Tickets: #533

Discussion

  • Anonymous

    Anonymous - 2026-07-21

    Originally posted by: coderabbitai[bot]

    Review Change Stack

    [!WARNING]

    Review limit reached

    @Akarsh-Hegde, you've reached your PR review limit, so we couldn't start this review.

    Next review available in: 47 minutes

    Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
    You're only billed for reviews past your plan's rate limits ($0.25/file).


    How can I continue?

    After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

    To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.


    How do review limits work?

    CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

    For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

    Please refer docs for additional details.


    Review details


    ⚙️ Run configuration

    Configuration used: Organization UI

    Review profile: ASSERTIVE

    Plan: Pro Plus

    Run ID: 8b9419a1-1c44-4f72-bd86-0db41ee46574


    📥 Commits

    Reviewing files that changed from the base of the PR and between [107b20] and 919ccd6a2f94f4759eb45144da29c775bb9b2068.


    ⛔ Files ignored due to path filters (1)

    • Cargo.lock is excluded by !**/*.lock


    📒 Files selected for processing (1)

    • ui/components/timeline/TaskDetailDialog.tsx
    📝 Walkthrough ## Walkthrough The PR restructures CI and release automation, adds target-aware updater packaging, introduces proposed-worklog provider selection and local task statuses, revises GitHub connection flows, gates tray and dashboard features behind sign-in, improves analytics and health reconciliation, and updates timeline and composer behavior. ### Changes **Release automation** |Layer / File(s)|Summary| |---|---| |**Workflow orchestration**
    `.github/workflows/*`, `.releaserc*`, `Cargo.toml`|Adds cache warming, gated CI, tag preparation, draft release builds, publishing, and explicit release profile settings.| |**Release artifacts**
    `scripts/*`|Adds manifest composition and target-aware packaging, signing, verification, notarization, and updater-channel mirroring.| **Application behavior** |Layer / File(s)|Summary| |---|---| |**Worklog provider selection**
    `meridian-core/...`, `tray/src-tauri/src/commands/*`, `ui/components/timeline/*`, `ui/__tests__/*`|Allows drafted proposals to switch connected providers through guarded backend and frontend flows.| |**Integrations and GitHub flow**
    `tray/src-tauri/src/commands/integrations.rs`, `ui/components/IntegrationConnect.tsx`, `ui/lib/integrations.ts`|Centralizes provider detection and adds guided GitHub device authorization, project selection, and retry handling.| |**Tray state and sign-in**
    `tray/src-tauri/src/analytics.rs`, `tray/src-tauri/src/poll/*`, `tray/src/app.js`, `ui/app/setup/signin/*`|Adds retryable single-flight analytics, stale health-notice reconciliation, and sign-in gates for tray and dashboard content.| |**Personal task statuses**
    `meridian-core/src/readers/task_create.rs`, `tray/src-tauri/src/commands/statuses.rs`, `ui/components/timeline/*`|Adds database-backed local status listing and updates while preserving CLI handling for tracker-owned tasks.| |**Composer and timeline UI**
    `ui/components/plan/*`, `ui/components/timeline/*`, `ui/__tests__/*`|Supports board-provider state, multiple connected-provider indicators, plan refresh, measured task summaries, and pixel-aligned timeline positions.| |**Build and product support**
    `tray/src-tauri/Cargo.toml`, `README.md`, `ui/app/layout.tsx`, `ui/app/page.tsx`|Updates desktop crate linkage, pinned capture dependencies, test database support, and product-facing descriptions and sign-in entry points.| **Estimated code review effort:** 5 (Critical) | ~120 minutes **Possibly related issues** - [Meridiona/meridian#376](https://github.com/Meridiona/meridian/issues/376) — Adds proposal-provider selection behavior aligned with the issue’s provider/posting concern. **Possibly related PRs** - [[Meridiona/meridian#522](https://github.com/Meridiona/meridian/issues/522)](https://github.com/Meridiona/meridian/pull/522) — Directly overlaps the release pipeline and worklog provider-selection changes. - [[Meridiona/meridian#517](https://github.com/Meridiona/meridian/issues/517)](https://github.com/Meridiona/meridian/pull/517) — Shares the release workflow split and provider-selection plumbing. - [[Meridiona/meridian#393](https://github.com/Meridiona/meridian/issues/393)](https://github.com/Meridiona/meridian/pull/393) — Shares the GitHub OAuth device-flow implementation and UI wiring. **Suggested reviewers:** `adityaharishch` **Poem** > A rabbit hops through tags and builds, > While drafts choose boards with careful thrills. > GitHub’s little steps now shine, > Health notices clear in time. > The timeline settles pixel-right.
    🚥 Pre-merge checks | ✅ 5
    ✅ Passed checks (5 passed) | Check name | Status | Explanation | | :------------------------: | :------- | :------------------------------------------------------------------------------------------------------------------------ | | Title check | ✅ Passed | The title is concise and accurately summarizes the release promotion and major areas changed. | | Description check | ✅ Passed | The description covers the PR purpose, changes, and test plan, but it does not follow the repo template sections exactly. | | 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 help to get the list of available commands.

     

    Related

    Commit: [107b20]

  • Anonymous

    Anonymous - 2026-07-21

    Originally posted by: Akarsh-Hegde

    Status update

    CodeRabbit review — resolved

    Went through all 9 actionable findings against the current tip of pre-main:

    • 1 already fixed by [#526] before this review even finished ([skip ci] in .releaserc.json) — no action needed, thread auto-resolved.
    • 3 fixed via Meridiona/meridian#530 (opened against pre-main, per the no-direct-push-to-pre-main/main rule): the cache-warm.yml staging-vs-stable Tauri config mismatch, the release-prepare.yml Summary step's unbound ${{ steps.*.outputs }} interpolation, and notarize-dmg.sh missing MERIDIAN_TARGET validation.
    • 5 skipped with a stated reason (replied inline on each): repo-wide GitHub Actions SHA-pinning (real, but a standalone hardening initiative — heavy lift, flagging as follow-up), the ci.yml aggregate-gate suggestion (moot — neither main nor pre-main has branch protection configured, so nothing can currently get stuck on a skipped check), the mirror-updater-channel.sh/mirror-staging-release.sh de-dup (heavy lift refactor of two release-critical scripts, not worth the risk here), the README hyphen→em-dash nit (docs are exempt from the plain-hyphen rule per CLAUDE.md — declining, not a defect), and the fragile char-offset test window (trivial/low-value, left as-is).

    All 8 open threads replied to and resolved; the 9th was already resolved by CodeRabbit itself.

    Merge conflict — down to 1, and it's a merge-time resolution, not a pre-main fix

    Since this PR opened, [#526]/#527 landed on pre-main and cleared 2 of the original 3 conflicting files (release-prepare.yml, .releaserc.json). One remains: .github/workflows/ci.yml, and it's two small hunks:

    1. A comment describing the (now-removed) [skip ci] marker — pre-main's wording ("used to carry") is already the corrected version; main's is stale.
    2. The screenpipe MIT-pin expected hash — pre-main has the newer 064c44cc… (from [#524]); main still has the older 825b038d….

    Keep pre-main's side on both hunks when merging. This can't be resolved by pushing anything to pre-main first — I checked, and both ways of doing that have a real downside:

    • A full git merge origin/main into pre-main resolves the conflict, but also drags main's version-bump bookkeeping (Cargo.toml, CHANGELOG.md, package.jsons) onto pre-main — exactly what [#526] deliberately avoided doing, per its own description.
    • A partial/"ours" merge (take pre-main's content, discard main's) fixes the conflict without that pollution, but is worse: it makes main's current tip the new merge-base, and since pre-main's Cargo.toml still reads 1.71.0, the next real merge would then look like pre-main unilaterally downgrading main's version from 1.74.x back to 1.71.0 — a silent regression on the one branch that must never regress.

    So: please resolve this locally at merge time (git checkout main && git merge --no-ff pre-main, keep pre-main's side on both ci.yml hunks, push) rather than via GitHub's web "Resolve conflicts" button — that button back-merges main into pre-main first, which reintroduces the exact pollution [#526] avoided.

    Before merging

    • [ ] Merge Meridiona/meridian#530 into pre-main first (the 3 CodeRabbit fixes above)
    • [ ] Merge this PR with a merge commit, not squash (per afb5e631 / release-prepare.yml's own guard against exactly this)
    • [ ] Resolve the single ci.yml conflict locally, keeping pre-main's side on both hunks
    • [ ] Confirm release-build.yml actually fires off the tag release-prepare.yml cuts after merge
     

    Related

    Tickets: #524
    Tickets: #526

  • Anonymous

    Anonymous - 2026-07-21

    Originally posted by: Akarsh-Hegde

    Conflict resolved

    Opened Meridiona/meridian#533 (pre-main) — a real merge of main into pre-main that resolves the last remaining conflict here (the two small ci.yml hunks), keeping pre-main's side on both (corrected comment wording + the newer screenpipe pin hash). Verified clean: no stray conflict markers, ci.yml diffed against main shows only the two intended hunks, full pre-push suite green.

    Once [#533] is merged into pre-main, this PR should flip from CONFLICTING to MERGEABLE.

    Ready-to-merge checklist

    • [x] CodeRabbit review conversations resolved (see the earlier status comment)
    • [ ] Merge Meridiona/meridian#533 into pre-main (clears the conflict)
    • [ ] Merge this PR with a merge commit, not squash (per afb5e631 / release-prepare.yml's own guard against exactly that failure mode)
    • [ ] Confirm release-build.yml actually fires off the tag release-prepare.yml cuts after merge
     

    Related

    Tickets: #533

  • Anonymous

    Anonymous - 2026-07-21

    Originally posted by: Akarsh-Hegde

    Update

    New CodeRabbit finding fixed: as pre-main has grown with more merged feature work, CodeRabbit's re-review caught a real bug in TaskDetailDialog.tsx (StatusBanner's Undo/dismiss clicks weren't stopping propagation, so they bubbled up and closed the whole dialog). Fixed in Meridiona/meridian#534pre-main. Thread replied to and resolved.

    All 10 review conversation threads on this PR are now resolved.

    On the merge conflict: it's still showing because Meridiona/meridian#533 (the fix from my last update) hasn't been merged into pre-main yet — that's expected, not a new conflict. To recap the path to green:

    1. Merge [#533] into pre-main (resolves the ci.yml conflict)
    2. Merge [#534] into pre-main (the StatusBanner fix above)
    3. This PR should then show MERGEABLE
    4. Merge with a merge commit, not squash

    I'll keep triaging new CodeRabbit findings as pre-main picks up more merged work in the meantime, but the conflict itself needs [#533] merged — that's the one step only you can do.

     

    Related

    Tickets: #533
    Tickets: #534

  • Anonymous

    Anonymous - 2026-07-21

    Ticket changed by: Akarsh-Hegde

    • status: open --> closed
     

Log in to post a comment.