Originally created by: adityaharishch
Re-cuts the release that [#517] was supposed to cut. Merge this with "Create a merge commit" - NOT squash. That is the entire point of the PR; squashing it reproduces the bug it exists to fix.
[#517] was squash-merged, which collapsed its 11 conventional commits into one commit titled release: staging → production (Silicon-only pipeline, warm cache) (#517). release: is not a conventional type, so semantic-release saw nothing to release:
Analysis of 1 commits complete: no release
There are no relevant changes, so no new version is released.
→ no releasable commits; nothing tagged
No tag was pushed, release-build never fired, and production is still on v1.74.0 while main's code is the new pipeline. Cargo.toml on main still reads 1.74.0.
Every previous release used a merge commit, which is why this never surfaced before:
7217d0a2 Merge pull request #495 from Meridiona/pre-main
1db2472c fix(tray): fix Dock/menu-bar icon rendering...
a554ad75 feat(worklog): auto-draft worklogs once a day...
Those feat:/fix: subjects stayed visible to commit-analyzer. Squash destroys exactly the information semantic-release needs.
Squash is correct for feature PRs into pre-main - one tidy commit per feature. It is wrong for the release PR, whose only job is to carry those commits through intact.
14 commits, 10 releasable (feat/fix/perf), so commit-analyzer should cut a minor - v1.75.0 - on the feat: entries.
afb5e631 ci: stop re-running the suite on pre-main → main release PRs (#521)
76ff5472 feat(auth): make sign-in compulsory across dashboard and tray popover (#520)
1c05647c fix(ci): bind the tag through env, stop persisting the checkout token (#518)
f7bc7545 fix(ci): unset notarization creds for staging instead of blanking them (#516)
c1df5543 feat(ci): migrate production onto the Silicon-only two-workflow pipeline (#515)
f9368c49 perf(ci): warm the release cache on main and skip staging notarization (#514)
17672ac5 fix(ci): a pre-main merge produces a downloadable macOS Silicon staging build (#513)
52894cf1 fix(ci): auto-cut staging on every pre-main push, drop the fragile marker (#512)
6ae54ea2 fix(ci): make staging release manual-only, not commit-message triggered (#511)
6b4aa96e ci: new prepare + tag-triggered release pipeline (#508)
e36e605e test(ui): cover the toolbar's multi-provider Connected pill
f3ebc02c feat(worklog): choose which tracker a proposed ticket is created on
7cd3f720 fix(tray): match PostHog daily_usage to dashboard stats (#505)
22cbd0dd Merge pull request #507 from Meridiona/feat/provider-selection
[#517]'s squash already carried the file contents. The only tree difference is [#521]'s ci.yml change, plus main's own release bookkeeping:
.github/workflows/ci.yml | 27 +++++- ← the only real change
CHANGELOG.md | 179 ------ main-only, preserved by the merge
Cargo.toml / Cargo.lock | 2 +- main-only, preserved
packages/meridian-mcp/package.json | 2 +-
tray/src-tauri/tauri.conf.json | 2 +-
ui/package.json | 2 +-
Merge dry-run verified: no conflicts, and the result keeps Cargo.toml at 1.74.0 and the full 2700-line CHANGELOG - pre-main never receives version bumps (the staging config has no @semantic-release/git plugin), so main's side wins on all of those.
So this is a history fix, not a code change. What it delivers is the tag.
release-prepare on main → cuts v1.75.0, commits the bump + changelog, pushes the tagrelease-build → Apple-Silicon-only, signed and notarized, publishes the DMGcache-warm re-seedsThe cache is already warm - Cache warm (macOS release) succeeded on main at 11:11 after [#517] - so this build should be the first to come in materially under the old ~25 minutes.
v1.74.0 shipped Meridian-setup.exe. This drops Windows and Intel from production; those installs stop receiving updates and freeze on their current version. Both are one-line restorable (matrix leg, publish needs, asset completeness check, compose-updater-manifest.py REQUIRED).
It also carries #520, compulsory sign-in - a user-facing behaviour change that landed on pre-main after [#517] was opened. Worth a deliberate look before releasing it to production.
allowed_merge_methods on the main ruleset is ["merge","squash","rebase"], so this failure mode stays available. Removing squash there would make it structurally impossible. Separately, release-prepare currently exits 0 when it finds nothing releasable - on main that should probably fail loudly, since a release merge that releases nothing should not be green.
Tickets: #517
Tickets: #521
Tickets: #523
Tickets: #525
Tickets: #528
Originally posted by: coderabbitai[bot]
ℹ️ Recent review info
⚙️ Run configuration
**Configuration used**: Organization UI **Review profile**: ASSERTIVE **Plan**: Pro Plus **Run ID**: `7633f497-ac13-4e87-bc9f-5848630bf00e`📥 Commits
Reviewing files that changed from the base of the PR and between [93a8d0] and afb5e631e49c544828fc8f9422e436bdd4472280.📒 Files selected for processing (45)
* `.github/workflows/cache-warm.yml` * `.github/workflows/ci.yml` * `.github/workflows/release-build.yml` * `.github/workflows/release-prepare.yml` * `.github/workflows/release-staging.yml` * `.github/workflows/release.yml` * `.releaserc.json` * `.releaserc.staging.json` * `Cargo.toml` * `README.md` * `meridian-core/src/readers/day_task_worklogs/mod.rs` * `meridian-core/tests/readers.rs` * `scripts/build-daemon-universal.sh` * `scripts/compose-updater-manifest.py` * `scripts/mirror-staging-release.sh` * `scripts/mirror-updater-channel.sh` * `scripts/notarize-dmg.sh` * `scripts/package-updater.sh` * `scripts/sign-daemon.sh` * `scripts/verify-release-bundle.sh` * `tray/src-tauri/Cargo.toml` * `tray/src-tauri/src/analytics.rs` * `tray/src-tauri/src/commands/account.rs` * `tray/src-tauri/src/commands/dashboard.rs` * `tray/src-tauri/src/commands/integrations.rs` * `tray/src-tauri/src/lib.rs` * `tray/src/app.js` * `tray/src/index.html` * `tray/src/style.css` * `ui/__tests__/composer-board-target.test.ts` * `ui/__tests__/toolbar-connected-pill.test.ts` * `ui/__tests__/worklog-propose-provider.test.ts` * `ui/app/layout.tsx` * `ui/app/page.tsx` * `ui/app/setup/signin.tsx` * `ui/app/setup/signin/RequireSignIn.tsx` * `ui/components/plan/TaskComposer.tsx` * `ui/components/plan/useTaskComposer.ts` * `ui/components/timeline/DayTaskDetailPanel.tsx` * `ui/components/timeline/MeridianTimelineShell.tsx` * `ui/components/timeline/Toolbar.tsx` * `ui/components/timeline/WorklogTargets.tsx` * `ui/components/timeline/useTimelineData.ts` * `ui/components/timeline/useWorklog.ts` * `ui/lib/integrations.ts`📝 Walkthrough
## Walkthrough This PR restructures CI and release automation, adds target-aware macOS packaging, enables draft worklog provider reassignment, gates dashboard and tray content behind sign-in, and revises analytics retry and daily usage behavior. ### Changes **Release pipeline and build artifacts** |Layer / File(s)|Summary| |---|---| |**CI and release orchestration**`.github/workflows/*`, `.releaserc*`, `Cargo.toml`, `README.md`|CI triggers and path filters are revised, release preparation and publishing workflows are added, semantic-release creates draft releases, and release profile settings and project text are updated.| |**Target-aware release artifacts**
`scripts/*`, `tray/src-tauri/Cargo.toml`|macOS builds, signing, notarization, packaging, updater manifests, staging mirroring, and bundle verification support universal and architecture-specific outputs.| **Worklog provider selection** |Layer / File(s)|Summary| |---|---| |**Provider mutation backend**
`meridian-core/src/readers/day_task_worklogs/mod.rs`, `meridian-core/tests/readers.rs`, `tray/src-tauri/src/commands/*`, `tray/src-tauri/src/lib.rs`|Drafted proposal worklogs can be reassigned to connected providers with guarded persistence, validation, command wiring, and tests.| |**Provider selection UI**
`ui/components/plan/*`, `ui/components/timeline/*`, `ui/lib/integrations.ts`|Composer and worklog components support remembered board providers, provider selection, server updates, and provider-specific display text.| |**Connected-provider display**
`ui/components/timeline/{useTimelineData,MeridianTimelineShell,Toolbar}.tsx`|Timeline connection state and toolbar pills now represent multiple connected providers.| |**Provider UI validation**
`ui/__tests__/*provider*.test.ts`, `ui/__tests__/composer-board-target.test.ts`|Tests cover provider selection rules, persistence, rendering, labels, and mutation wiring.| **Authentication gating** |Layer / File(s)|Summary| |---|---| |**Dashboard sign-in gate**
`ui/app/page.tsx`, `ui/app/setup/signin*`, `ui/app/layout.tsx`|Dashboard content is wrapped in a client-side sign-in gate that persists the account email and renders signed-out and loading states.| |**Tray sign-in lock**
`tray/src/app.js`, `tray/src/index.html`, `tray/src/style.css`|The tray delays live behavior until authentication succeeds and displays a styled sign-in lock otherwise.| **Analytics reliability** |Layer / File(s)|Summary| |---|---| |**Analytics retry and payloads**
`tray/src-tauri/src/analytics.rs`, `tray/src-tauri/src/commands/account.rs`|Analytics sends now report success, retry failed bookkeeping, prevent overlapping ticks, use Today-card fields, and remove immediate sign-in identification.| **Estimated code review effort:** 5 (Critical) | ~120 minutes **Possibly related issues** - [Meridiona/meridian#376](https://github.com/Meridiona/meridian/issues/376) — Adds the provider-selection workflow and draft provider reassignment described by the issue. **Possibly related PRs** - [[Meridiona/meridian#338](https://github.com/Meridiona/meridian/issues/338)](https://github.com/Meridiona/meridian/pull/338) — Introduces shared tracker metadata and connection handling used by the provider-selection UI. - [[Meridiona/meridian#427](https://github.com/Meridiona/meridian/issues/427)](https://github.com/Meridiona/meridian/pull/427) — Modifies the same tray analytics module and event-sending flow. - [[Meridiona/meridian#517](https://github.com/Meridiona/meridian/issues/517)](https://github.com/Meridiona/meridian/pull/517) — Overlaps directly in tracker selection, PostHog wiring, and connected-provider behavior. **Suggested reviewers:** `akarsh-hegde` **Poem** > A rabbit hops through builds at night, > Seeds warm caches in moonlit light. > Drafts pick boards, sign-ins glow, > Analytics retry where errors flow. > Release manifests neatly align— > “Hop approved!” says Bunny, “Ship on time!”
✨ Finishing Touches
📝 Generate docstrings
- [ ] Create stacked PR - [ ] Commit on current branch🧪 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.Ticket changed by: adityaharishch