Menu

#416 promote: pre-main → main

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

Originally created by: Akarsh-Hegde

Summary

Promotes 88 commits (27 PRs) from pre-main to main. main ⊆ pre-main invariant holds (verified via git merge-base); CI is green on pre-main HEAD (e26ce309). Six threads:

1. PM ticket write-back — canonical data model (#361, [#385])

  • Introduces meridian-core::canonical_task (CanonicalTask + ProviderAdapter trait) and moves all six connector adapters (Jira, Linear, Trello, Azure DevOps, GitHub, Asana) into meridian-core/src/adapters/, populating new CDM columns end-to-end (migration 056_pm_tasks_canonical.sql).
  • Adds an Asana reference adapter (adapter-only, no live sync yet).
  • Removes the labels-hygiene check and its write-back path (#385) — folded out during the CDM migration since label semantics don't generalize cleanly across all six providers.

2. GitHub integration (#379, [#380], [#393])

  • Lets the GitHub connect flow pick which Projects v2 board to sync, instead of a hardcoded project.
  • Fixes "Open in tracker" links across the UI to reliably open the browser instead of no-op'ing.
  • Replaces the headless gh auth token shell-out with a native GitHub OAuth device-flow (meridian-oauth/src/github.rs) — no gh CLI dependency, one-time code shown in the dashboard's "Browser" connect flow. .env.example gains GITHUB_OAUTH_CLIENT_ID (public identifier, baked in for release builds via GH_OAUTH_CLIENT_ID).

3. Notifications — interactive toast rails (#392)

  • Swaps the notification plugin, adds the response leg (id-correlated round-trip) and a snooze consumer. New migration 057_notification_actions.sql, notifications.rs/notification_responses.rs split into meridian-core/src/notifications/{mod,responses,tests}.rs.
  • NOTIFICATIONS.md added as the integration guide for the outbox → deliver → respond → consume lifecycle.

4. Observability consolidation (#395, [#399])

  • Consolidates all logging/tracing into one OpenTelemetry pipeline: observability.rs splits into mod.rs / install_mode.rs / otlp_target.rs; telemetry_spool splits into mod.rs / launchd_log_cap.rs / retention.rs / render.rs.
  • Removes the now-redundant standalone OpenObserve dashboard commands (tray/src-tauri/src/commands/openobserve.rs, -335 lines) and retired daemon/service artifacts (old plist paths, install-from-bundle.sh cleanup, agno's standalone SQLite trace viewer).

5. Tray, popover & dashboard timeline (#394, [#396]–398, [#400], [#402]–406, [#408], [#415])

  • Popover: expandable Capturing-status health panel, MLX runtime download retry with exponential backoff, dashboard reopens on external re-activation, dismissal moved into the Rust command layer.
  • Timeline: "Open in tracker" links on worklog cards, Overview panel's day-label/Focus-stats correctly scoped to the viewed day (was leaking across days), TLDR-only inline rendering for solo-mode hours, local-time inline markers + plain-language activity TLDR in session distillation, and a fix for duplicate worklog_hour runs firing from concurrent daemons (dev + installed).
  • [#415] lands a larger batch: coding-agents column widening, timeline zoom hotkeys, per-app brand icons (ui/lib/{app-icons,brand-icons}.ts, tray/src-tauri/src/commands/app_icons.rs), a GitHub OAuth cancel-mid-flow fix, and an Overview/Hour-detail panel redesign (ActivityReport(Modal), TimeByCategory, CurvedArrow).
  • Dev loop: dev-start.sh now kills orphaned next dev + legacy a11y-helper processes; pre-push hook failures in background jobs now propagate instead of being silently swallowed; tray popover unit tests moved into ui/__tests__ (bun auto-discovers them) and CI now runs on pushes/PRs targeting pre-main.

6. Fixes along the way

  • Plan nudges now expire at local midnight instead of stacking across days.
  • Pinned transformers < 5.13 to unbreak MLX runtime smoke tests / publish.
  • External links: global interceptor + mailto:/tel: handling + rejection fallback for the Tauri webview (two follow-on fixes after the first attempt regressed staging).
  • main → pre-main sync (#388) to restore the main ⊆ pre-main invariant mid-cycle.

Versions

App version (Cargo.toml / npm/meridian/package.json) is 1.69.1 on both branches — no regression this time. The MLX runtime version (services/pyproject.toml) is 1.69.2 on pre-main vs 1.69.1 on main, i.e. pre-main is ahead — merging will let the main-branch auto-publish gate (scripts/runtime-publish-gate.sh) fire for runtime-latest (currently live at stale 1.68.0, predates this whole batch). That publish job runs in the production-runtime GitHub Environment and needs a required reviewer to approve it before it actually ships to users.

Test plan

Each commit reports its own verification in-message (cargo build/clippy -D warnings/test, tsc --noEmit, next build, bun test), and CI is green on pre-main HEAD. Before merging this PR:

  • [ ] cargo test (workspace) passes on main post-merge
  • [ ] cargo clippy -- -D warnings clean
  • [ ] cd ui && npm run build && npm test clean
  • [ ] cd tray/src-tauri && cargo test clean
  • [ ] Approve the production-runtime publish job once it queues, so runtime-latest actually moves off the stale 1.68.0 build
  • [ ] Smoke-test the GitHub OAuth device flow and the interactive-notification response round-trip on a packaged build (both need a real .app bundle / OS integration to exercise fully)

🤖 Generated with Claude Code

Related

Tickets: #380
Tickets: #385
Tickets: #393
Tickets: #396
Tickets: #399
Tickets: #400
Tickets: #402
Tickets: #408
Tickets: #415
Tickets: #424
Tickets: #440

Discussion

  • Anonymous

    Anonymous - 2026-07-09

    Originally posted by: coderabbitai[bot]

    [!IMPORTANT]

    Review skipped

    Too many files!

    This PR contains 166 files, which is 16 over the limit of 150.

    To get a review, narrow the scope:
    • coderabbit review --type committed # exclude uncommitted changes
    • coderabbit review --dir <path> # limit to a subdirectory
    • coderabbit review --base <branch> # compare against a closer base</branch></path>

    Upgrade to a paid plan to raise the limit.


    ⚙️ Run configuration

    Configuration used: Organization UI

    Review profile: ASSERTIVE

    Plan: Pro Plus

    Run ID: 874e7e83-afda-46e6-aa82-220b8a10b547


    📥 Commits

    Reviewing files that changed from the base of the PR and between [8fa43a] and 6b22207ca8d3ad596fb8fd2855f8a60a7a5921b4.


    ⛔ Files ignored due to path filters (2)

    • Cargo.lock is excluded by !**/*.lock
    • ui/package-lock.json is excluded by !**/package-lock.json


    📒 Files selected for processing (166)

    • .env.example
    • .githooks/pre-push
    • .github/workflows/ci.yml
    • .github/workflows/release-staging.yml
    • .github/workflows/release.yml
    • CLAUDE.md
    • Cargo.toml
    • NOTIFICATIONS.md
    • TESTING.md
    • build.rs
    • dev-start.sh
    • infra/hf-proxy/.gitignore
    • infra/hf-proxy/package.json
    • infra/hf-proxy/smoke.sh
    • infra/hf-proxy/src/index.js
    • infra/hf-proxy/wrangler.toml
    • meridian-core/src/adapters/asana.rs
    • meridian-core/src/adapters/azure_devops.rs
    • meridian-core/src/adapters/github.rs
    • meridian-core/src/adapters/jira.rs
    • meridian-core/src/adapters/linear.rs
    • meridian-core/src/adapters/mod.rs
    • meridian-core/src/adapters/trello.rs
    • meridian-core/src/canonical_task.rs
    • meridian-core/src/lib.rs
    • meridian-core/src/notifications/mod.rs
    • meridian-core/src/notifications/responses.rs
    • meridian-core/src/notifications/tests.rs
    • meridian-core/src/readers/coding_agents.rs
    • meridian-core/src/readers/tasks.rs
    • meridian-core/src/util/hygiene.rs
    • meridian-core/tests/readers.rs
    • meridian-oauth/src/github.rs
    • meridian-oauth/src/lib.rs
    • npm/meridian-darwin-arm64/package.json
    • scripts/com.meridiona.daemon.plist
    • scripts/install-from-bundle.sh
    • scripts/meridian-cli.sh
    • scripts/package-release.sh
    • services/agents/agno_viewer.py
    • services/agents/observability.py
    • services/agents/prompts/activity_report.py
    • services/agents/server.py
    • services/agents/session_distiller.py
    • services/pyproject.toml
    • services/scripts/com.meridiona.mlx-server.plist
    • services/scripts/install-mlx-server-daemon.sh
    • src/config.rs
    • src/daily_plan.rs
    • src/health/platform.rs
    • src/health/ui.rs
    • src/intelligence/oauth/github.rs
    • src/intelligence/oauth/mod.rs
    • src/intelligence/providers/azure_devops/db.rs
    • src/intelligence/providers/azure_devops/fetch.rs
    • src/intelligence/providers/azure_devops/mod.rs
    • src/intelligence/providers/azure_devops/tests.rs
    • src/intelligence/providers/cdm.rs
    • src/intelligence/providers/github/fetch.rs
    • src/intelligence/providers/github/mod.rs
    • src/intelligence/providers/github/tests.rs
    • src/intelligence/providers/jira.rs
    • src/intelligence/providers/jira/fetch.rs
    • src/intelligence/providers/jira/mod.rs
    • src/intelligence/providers/jira/tests.rs
    • src/intelligence/providers/linear/mod.rs
    • src/intelligence/providers/linear/tests.rs
    • src/intelligence/providers/mod.rs
    • src/intelligence/providers/trello.rs
    • src/intelligence/task_triage/mod.rs
    • src/intelligence/task_triage/store.rs
    • src/intelligence/task_triage/triage_fixtures.json
    • src/intelligence/ticket_update/azure_devops.rs
    • src/intelligence/ticket_update/github.rs
    • src/intelligence/ticket_update/jira.rs
    • src/intelligence/ticket_update/jira_transitions.rs
    • src/intelligence/ticket_update/linear.rs
    • src/intelligence/ticket_update/mod.rs
    • src/intelligence/ticket_update/trello.rs
    • src/lib.rs
    • src/main.rs
    • src/migrations/056_pm_tasks_canonical.sql
    • src/migrations/057_notification_actions.sql
    • src/notices.rs
    • src/notification_responses.rs
    • src/notifications.rs
    • src/observability/install_mode.rs
    • src/observability/mod.rs
    • src/observability/otlp_target.rs
    • src/pm_worklog/scheduler.rs
    • src/telemetry_spool/cli.rs
    • src/telemetry_spool/launchd_log_cap.rs
    • src/telemetry_spool/mod.rs
    • src/telemetry_spool/render.rs
    • src/telemetry_spool/retention.rs
    • src/telemetry_spool/shipper.rs
    • tests/install/test_plist_lint.sh
    • tests/install/test_plist_render.sh
    • tests/log_level_reload.rs
    • tray/package.json
    • tray/src-tauri/Cargo.toml
    • tray/src-tauri/Info.plist
    • tray/src-tauri/build.rs
    • tray/src-tauri/capabilities/default.json
    • tray/src-tauri/src/backend_install.rs
    • tray/src-tauri/src/commands.rs
    • tray/src-tauri/src/commands/app_icons.rs
    • tray/src-tauri/src/commands/dashboard.rs
    • tray/src-tauri/src/commands/diagnostics.rs
    • tray/src-tauri/src/commands/integrations.rs
    • tray/src-tauri/src/commands/logs.rs
    • tray/src-tauri/src/commands/notifications.rs
    • tray/src-tauri/src/commands/openobserve.rs
    • tray/src-tauri/src/commands/settings.rs
    • tray/src-tauri/src/commands/setup.rs
    • tray/src-tauri/src/commands/system.rs
    • tray/src-tauri/src/lib.rs
    • tray/src-tauri/src/mlx_server.rs
    • tray/src-tauri/src/poll/live.rs
    • tray/src-tauri/src/poll/mod.rs
    • tray/src-tauri/src/poll/notifications.rs
    • tray/src-tauri/src/sys.rs
    • tray/src-tauri/src/tray.rs
    • tray/src-tauri/src/update.rs
    • tray/src-tauri/tauri.conf.json
    • tray/src/app.js
    • tray/src/index.html
    • tray/src/style.css
    • ui/__tests__/external-links.test.ts
    • ui/__tests__/popover-health-panel.test.ts
    • ui/__tests__/popover-pause-utils.test.js
    • ui/__tests__/tasks-provider-filter.test.ts
    • ui/__tests__/timeline-card-tracker.test.ts
    • ui/app/globals.css
    • ui/app/layout.tsx
    • ui/app/setup/steps.tsx
    • ui/components/ExternalLinks.tsx
    • ui/components/HygieneDialog.tsx
    • ui/components/IntegrationConnect.tsx
    • ui/components/LayoutBanners.tsx
    • ui/components/atoms.tsx
    • ui/components/plan/parts.tsx
    • ui/components/timeline/ActivityReport.tsx
    • ui/components/timeline/ActivityReportModal.tsx
    • ui/components/timeline/CleanupCard.tsx
    • ui/components/timeline/CurvedArrow.tsx
    • ui/components/timeline/HourDetailPanel.tsx
    • ui/components/timeline/MeridianTimelineShell.tsx
    • ui/components/timeline/OverviewPanel.tsx
    • ui/components/timeline/RightPanel.tsx
    • ui/components/timeline/TaskDetailDialog.tsx
    • ui/components/timeline/TimeByApp.tsx
    • ui/components/timeline/TimeByCategory.tsx
    • ui/components/timeline/TimelineCard.tsx
    • ui/components/timeline/TimelineColumn.tsx
    • ui/components/timeline/settings/AdvancedSection.tsx
    • ui/components/timeline/settings/useApplyObservability.ts
    • ui/components/timeline/settings/useExportDiagnostics.ts
    • ui/components/timeline/useTimelineData.ts
    • ui/lib/api-types.ts
    • ui/lib/app-icons.ts
    • ui/lib/brand-icons.ts
    • ui/lib/bridge.ts
    • ui/lib/hygiene.ts
    • ui/lib/integrations.ts
    • ui/package.json

    You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

    Use the checkbox below for a quick retry:
    - [ ] 🔍 Trigger review

    ✨ 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: [8fa43a]

  • Anonymous

    Anonymous - 2026-07-09

    Ticket changed by: Akarsh-Hegde

    • status: open --> closed
     

Log in to post a comment.