Originally created by: Akarsh-Hegde
v1.73.0 shipped macOS-only. Its windows-release job failed, so the release carries no Meridian-setup.exe and production latest.json has no windows-x86_64 key. Windows users can neither install nor auto-update to 1.73.0 - they are stranded on whatever they are running. macOS is unaffected and updating normally.
This promotion carries the fix.
A ten-minute miss, not a regression. PR [#490] merged to pre-main at 09:06:13; the 1.73.0 release was cut from main at 08:56. main therefore lacked the Windows cfg-gating, and the tray build died on three macOS-only constructs reaching a Windows compile:
error[E0455]: link kind `framework` is only supported on Apple targets
error[E0425]: cannot find function `with_autorelease_pool` in this scope
error[E0599]: no method named `title_bar_style` found for WebviewWindowBuilder
Confirmed by diffing the branches - pre-main adds the non-macOS fallback main is missing:
+#[cfg(not(target_os = "macos"))]
+fn with_autorelease_pool<R>(f: impl FnOnce() -> R) -> R {
pre-main has moved since this PR was opened. It now carries three things, not one:
| PR | what | risk to production |
|---|---|---|
| [#490] | the Windows port of the in-process capture module - the reason for this PR | the fix itself |
| [#493] | let the GitHub project picker save after an OAuth connect | small, UI + integrations |
| [#494] | parallelise the staging release build | none to production - see below |
All commits are fix(...) or ci(...), so semantic-release will cut 1.73.1.
release.yml is unmodified by this promotion - confirm with git diff origin/main origin/pre-main -- .github/workflows/release.yml (empty). [#494] rewrote release-staging.yml only, which main never runs: it triggers on pushes to pre-main and is gated behind a [staging-release] marker or a manual dispatch. Merging it to main carries the file but cannot execute it.
It also deleted .releaserc.staging.json's prepareCmd. That config is likewise staging-only; production uses .releaserc.json, untouched.
It has been observed skipping correctly on an unmarked push (all four jobs, 0s) but has not yet cut a staging release. That proving run is in flight separately. If you would rather not carry an unexercised release workflow into main - even a dormant one - say so and I will re-target this PR at just [#490]'s commits.
git merge-tree), no conflictsmain's 1.73.0 in Cargo.toml, tauri.conf.json and ui/package.json - pre-main sits at 1.71.0 because staging never commits a version bump, but it has not touched those files since the merge base, so nothing is reverted.github/workflows/release.yml unchangedThe Windows job only runs after the macOS release has published and tagged. There is no gate that would have caught this before 1.73.0 became "latest" - which is exactly how a half-shipped release happened, and it can recur on any Windows-only breakage. Whether a Windows failure should be able to fail a release that already shipped macOS, or whether both should build before either publishes, is a real design question. Out of scope here; this PR just unsticks Windows.
🤖 Generated with Claude Code
Tickets: #490
Tickets: #493
Tickets: #494
Tickets: #495
Tickets: #496
Tickets: #504
Originally posted by: coderabbitai[bot]
📝 Walkthrough
## Walkthrough This PR restructures staging releases, adds LLM provider onboarding and committed selection flows, hardens Cursor execution, adds summarization fallback routing, improves integration and platform handling, and introduces scheduled worklog draft generation with settings and UI support. ### Changes **Staging release pipeline** |Layer / File(s)|Summary| |---|---| |**Plan and parallel architecture builds**`.claude/skills/release/SKILL.md`, `.github/workflows/release-staging.yml`|The workflow computes prerelease metadata and builds version-stamped macOS slices concurrently without bundling.| |**Join, sign, verify, and publish**
`.github/workflows/release-staging.yml`, `.releaserc.staging.json`, `scripts/merge-windows-updater.py`|Universal artifacts are signed, notarized, packaged, verified, and published without `prepareCmd`; Windows stamping and ASCII-safe output are updated.| |**Main-only Rust cache writes**
`.github/workflows/ci.yml`|Rust cache entries are saved only on `main`.| **LLM provider onboarding and connection** |Layer / File(s)|Summary| |---|---| |**Provider installation metadata and selection contracts**
`meridian-core/src/llm_provider.rs`, `meridian-core/src/lib.rs`, `ui/lib/llm-providers.ts`|Provider installer metadata, pinned Cursor constants, chooser text, and shared selection-field construction are added.| |**Provider installation and Cursor sign-in API**
`src/llm/detect.rs`, `tray/src-tauri/src/commands/setup.rs`, `tray/src-tauri/src/lib.rs`|Installer and sign-in operations return structured outcomes, verify CLI availability, handle timeouts, and are exposed as Tauri commands.| |**Chooser, detail, and committed provider flow**
`ui/components/LlmProvider*.tsx`, `ui/app/setup/*`, `ui/components/timeline/settings/IntelligenceSection.tsx`, `ui/__tests__/*provider*.test.ts`|Provider selection commits after persistence and adds recommended tiles, detail phases, async actions, logos, setup wiring, and regression checks.| **Cursor execution and summarization** |Layer / File(s)|Summary| |---|---| |**Hardened Cursor CLI execution ladder**
`src/llm/cursor_cli.rs`|Cursor invocations use safety arguments, sandboxed homes, neutral workspaces, environment controls, failure classification, and retry degradation.| |**Cursor backend and summarizer integration**
`src/llm/cursor.rs`, `src/coding_agent_session_ingest/summariser/cursor_agent.rs`|Cursor prompts include an ingest marker, calls use the hardened path, responses use JSON envelopes, and failures are classified for degradation.| |**Global provider summarization fallback**
`src/coding_agent_session_ingest/summariser/*`, `src/coding_agent_session_ingest/sources/mod.rs`, `src/llm/resolver.rs`|Meridian-issued sessions are filtered, eligible summarization failures use the selected provider, and fallback provenance is persisted.| **Integration validation and platform compatibility** |Layer / File(s)|Summary| |---|---| |**Required credential validation with environment merging**
`tray/src-tauri/src/commands/integrations.rs`|Required credentials are checked across submitted values and the active `.env`, including placeholder handling and partial-edit tests.| |**Platform-specific compilation and warnings**
`tray/src-tauri/src/backend_install.rs`, `tray/src-tauri/src/capture/*`, `tray/src-tauri/src/commands/app_icons.rs`, `tray/src-tauri/src/lib.rs`|macOS-specific code is conditionally compiled or warning-suppressed, with non-macOS fallbacks for permissions and autorelease handling.| |**Dashboard window lifecycle and platform-aware builder**
`tray/src-tauri/src/sys.rs`, `tray/src-tauri/src/commands/system.rs`, `tray/src-tauri/src/tray.rs`|Dashboard closure handling is centralized and wizard title-bar styling is applied conditionally on macOS.| **Worklog auto-generation with time-gating and UI** |Layer / File(s)|Summary| |---|---| |**Auto-generation backend and time validation**
`src/pm_worklog/auto_generate.rs`, `tray/src-tauri/src/commands/settings.rs`|Draft generation is gated by configured time, tracker availability, task duration, and existing drafts; settings validate HH:MM values.| |**Pipeline and settings integration**
`src/pm_worklog/mod.rs`, `src/worklog_pipeline.rs`, `meridian-core/src/settings.rs`, `meridian-core/src/readers/day_task_worklogs/mod.rs`, `ui/lib/settings.ts`, `ui/lib/api-types.ts`|The pipeline invokes auto-generation at startup and hourly intervals, settings store scheduling state, and drafts expose `updated_at`.| |**Worklog settings and setup prompts**
`ui/components/timeline/*Worklog*`, `ui/components/timeline/settings/*`, `ui/components/timeline/MeridianTimelineShell.tsx`, `ui/components/timeline/DayTaskDetailPanel.tsx`|The UI adds a one-time prompt, worklog settings, scheduling controls, and generated-at draft timestamps.| **Estimated code review effort:** 5 (Critical) | ~90 minutes ### Sequence Diagram(s) :::mermaid sequenceDiagram participant SetupWizard participant ProviderPicker participant TauriCommands participant CursorCli SetupWizard->>ProviderPicker: Select provider and open details ProviderPicker->>TauriCommands: Request install, sign-in, or test TauriCommands->>CursorCli: Execute provider CLI CursorCli-->>TauriCommands: Return outcome TauriCommands-->>SetupWizard: Persist provider after successful commit **Possibly related issues** - [Meridiona/meridian#376](https://github.com/Meridiona/meridian/issues/376): Touches the same worklog pipeline loop that now invokes scheduled auto-generation. **Possibly related PRs** - [[Meridiona/meridian#338](https://github.com/Meridiona/meridian/issues/338)](https://github.com/Meridiona/meridian/pull/338): Modifies the same integration credential validation path. - [[Meridiona/meridian#341](https://github.com/Meridiona/meridian/issues/341)](https://github.com/Meridiona/meridian/pull/341): Introduces the hourly worklog loop extended here with auto-generation. - [[Meridiona/meridian#440](https://github.com/Meridiona/meridian/issues/440)](https://github.com/Meridiona/meridian/pull/440): Modifies the same macOS staging release workflow and Apple signing steps. **Suggested reviewers:** `adityaharishch` **Poem** > A rabbit drafts at chosen hours, > While Cursor guards its leafy towers. > Providers install, summaries align, > Staging ships on a measured line— > And worklogs bloom like flowers.
🚥 Pre-merge checks | ✅ 4 | ❌ 1
### ❌ Failed checks (1 warning) | Check name | Status | Explanation | Resolution | | :---------------: | :--------- | :----------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | | Description check | ⚠️ Warning | The description is detailed and relevant, but it does not follow the required template sections for testing, checklist, or related issues. | Add the template sections explicitly: What does this PR do?, How was it tested?, Checklist, and Related issues, with concrete test evidence or notes. |✅ Passed checks (4 passed)
| Check name | Status | Explanation | | :------------------------: | :------- | :------------------------------------------------------------------------------------------------------------------------------- | | Title check | ✅ Passed | The title is concise and accurately summarizes the main change: the release promotion that unblocks the Windows installer build. | | 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: Akarsh-Hegde
Review comments resolved - status update
All 11 inline threads are now resolved. Breakdown of where each was actually addressed, since it is spread across three PRs:
Already fixed by [#496] (merged) - 5 threads
release-staging.ymlfrom inside itselfcontents: writeon the staging workflow${{ }}interpolated directly intorun:shellsdetect_install_mode()called twice per saveThe Critical one is worth restating:
missing_requiredlet a submitted placeholder pass validation when a valid token was already in.env, andupsert_envwrites every submitted key verbatim - soyour-token-herewould land on top of a working credential. The pre-existing test could not catch it (it passed an empty.env); a new test supplies a stored token and fails without the fix.Fixed in [#504] (open, targets
pre-main) - 4 threadsmerge-windows-updater.pyfile-encoding.PYTHONIOENCODINGcovers stdin/stdout/stderr only;Path.read_text()/write_text()fall back tocp1252on Windows. My earlier [#500] fix pinned the console encoding and left the file I/O exposed to the identical failure one line away. Now pinned on all three operations.ui/lib/api-types.ts- all four (InstallOutcome,ProviderStatus,ProviderTestResult,ProviderTestOutcome), not just the one flagged.install_provider/cursor_sign_inwith an explicit failure status, recorded via the singleinstall_failedfunnel.ui/__tests__/helpers/source.ts.Verified: clippy clean, 258 UI tests + 130 Rust tests pass, UI production build succeeds, merge script re-tested on both happy and error paths.
Declined, with reasons on the threads - 2
dtolnay/rust-toolchain@masterto a SHA. It appears in all seven places across every workflow; pinning one file leaves the mutable ref live in six others. The comment cites an existing repo policy, but nothing in.github/workflowsis pinned today. Real repo-wide change, deserves its own PR.Merge readiness
This PR is not blocked by review comments any more. Two things to know before merging:
pre-main, which is this PR's head, so its fixes flow into this promotion automatically once merged. Merging [#495] ahead of it ships the incomplete encoding fix tomain.Meridian-setup.exeon the release, nowindows-x86_64key in productionlatest.json. Windows users can neither install nor auto-update, and have been stranded since this morning. That is what this PR fixes (#490's cfg-gating), and it is the most user-visible open item.Scope check:
git diff origin/main origin/pre-main -- .github/workflows/release.ymlis empty - production release machinery is untouched by this promotion.Recommended order: merge [#504], then merge this.
Related
Tickets:
#495Tickets:
#496Tickets:
#500Tickets:
#504Ticket changed by: Akarsh-Hegde