Menu

#371 promote: pre-main → main

closed
nobody
None
2026-06-30
2026-06-30
Anonymous
No

Originally created by: Akarsh-Hegde

Promotion of pre-main into main (21 commits, ~72 files). Raised for review + merge by a maintainer.

⚠️ Resolve the version conflict to ≥ 1.67.0 — do NOT take pre-main's value

There is one merge conflict: services/pyproject.toml.

  • pre-main = 1.64.0
  • main = 1.67.0
  • live production runtime = 1.66.2, live staging runtime = 1.63.0

services/pyproject.toml version is the MLX-runtime version, and the app's runtime auto-upgrade is an equality check against the published channel. If this merge lands main at 1.64.0, that is below the live production runtime 1.66.2, so:

  • a runtime publish off main could downgrade every production machine, and
  • it cannot deliver any fix forward as an upgrade.

Resolve the conflict by keeping 1.67.0 (or higher). Same applies to Cargo.toml / ui/package.json if they conflict — keep the main (higher) version. Normally set-version.sh enforces this in lockstep at release; this is a manual promotion, so reconcile by hand.

Worklog hotfix dependency

This promotion only carries the WORKLOG_SYSTEM worklog fix if #365 (worklog fix → pre-main) is merged into pre-main before this PR merges. If you need production worklogs restored, confirm the fix is present in worklog.py on the merge result (from agents.worklog_pipeline.prompts.worklog import SYSTEM as WORKLOG_SYSTEM) — otherwise main keeps the bug.

After merge — to actually recover production

Publish a runtime off main with a version > 1.66.2 (e.g. runtime-v1.67.0) so stuck 1.66.2 machines auto-upgrade and drain the pending worklog hours.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CT9wnEUuQeoBeufqTh46JC

Summary by CodeRabbit

  • New Features
  • Added timed capture pause with countdown and auto-resume, plus “work hours” scheduled pause/resume support.
  • Introduced tier-3 proposed ticket review: edit proposed title/worklog, approve/dismiss, and approve→create/post.
  • Extended timelines/worklogs to render proposed items inline and show “Paused” presence bands.
  • Added activity-report/distill scripts and new OpenObserve/Grafana dashboards.
  • Bug Fixes
  • Avoided duplicate pause-gap records when tray coverage overlaps ETL gaps.
  • Improved local-hour boundary handling for session grouping and selection.
  • Tests
  • Added coverage for hour-boundary sealing, terminal-title filtering, and pause UI helper behavior.

Related

Tickets: #376

Discussion

  • Anonymous

    Anonymous - 2026-06-30

    Originally posted by: coderabbitai[bot]

    Review Change Stack

    [!NOTE]

    Reviews paused

    It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

    Use the following commands to manage reviews:
    - @coderabbitai resume to resume automatic reviews.
    - @coderabbitai review to trigger a single review.

    Use the checkboxes below for quick actions:
    - [ ] ▶️ Resume reviews
    - [ ] 🔍 Trigger review

    No actionable comments were generated in the recent review. 🎉

    ℹ️ Recent review info
    ⚙️ Run configuration **Configuration used**: Organization UI **Review profile**: ASSERTIVE **Plan**: Pro Plus **Run ID**: `c58c321c-524f-4645-be5e-31d1187e6119`
    📥 Commits Reviewing files that changed from the base of the PR and between [057477] and d03a9445be15087057fb48cad66790003cfd1117.
    📒 Files selected for processing (1) * `services/pyproject.toml`
    📜 Recent review details
    ⚠️ CI failures not shown inline (6) **GitHub Actions: PR `#371` / 0_Analyze (rust).txt**: PR `#371` Conclusion: `failure` [View job details](https://api.github.com/repos/Meridiona/meridian/check-runs/76784839546/annotations) :::text ##[group]Extracting rust [command]/opt/hostedtoolcache/CodeQL/2.25.6/x64/codeql/codeql database trace-command --use-build-mode --working-dir /home/runner/work/meridian/meridian /home/runner/work/_temp/codeql_databases/rust Running command in /home/runner/work/meridian/meridian: [/opt/hostedtoolcache/CodeQL/2.25.6/x64/codeql/rust/tools/autobuild.sh] [] [build-stderr] Scanning for files in /home/runner/work/meridian/meridian... [] [build-stderr] /home/runner/work/_temp/codeql_databases/rust: Indexing files in in /home/runner/work/meridian/meridian... [] [build-stderr] Running command in /home/runner/work/meridian/meridian: [/opt/hostedtoolcache/CodeQL/2.25.6/x64/codeql/rust/tools/index-files.sh, /home/runner/work/_temp/codeql_databases/rust/working/files-to-index18405270784628430353.list] [] [build-stdout] [] [build-stdout]  INFO configuration: { [] [build-stdout] [] [build-stdout] scratch_dir: "/home/runner/work/_temp/codeql_databases/rust/working", [] [build-stdout] [] [build-stdout] trap_dir: "/home/runner/work/_temp/codeql_databases/rust/trap/rust", [] [build-stdout] [] [build-stdout] source_archive_dir: "/home/runner/work/_temp/codeql_databases/rust/src", [] [build-stdout] [] [build-stdout] diagnostic_dir: "/home/runner/work/_temp/codeql_databases/rust/diagnostic/extractors/rust", [] [build-stdout] [] [build-stdout] cargo_target_dir: None, [] [build-stdout] [] [build-stdout] cargo_target: None, [] [build-stdout] [] [build-stdout] cargo_features: [], [] [build-stdout] [] [build-stdout] cargo_cfg_overrides: [], [] [build-stdout] [] [build-stdout] cargo_extra_env: {}, [] [build-stdout] [] [build-stdout] cargo_extra_args: [], [] [build-stdout] [] [build-stdout] cargo_all_targets: false, [] [build-stdout] [] [build-stdout] logging_flamegraph: None, [] [build-stdout] [] [build-stdout] logging_verbosity: Some( [] [build-stdout] [] [build-stdout] "progress", [] [build-stdout] [] ... --- **GitHub Actions: PR `#371` / Analyze (rust)**: PR `#371` Conclusion: `failure` [View job details](https://api.github.com/repos/Meridiona/meridian/check-runs/76784839546/annotations) :::text ##[group]Extracting rust [command]/opt/hostedtoolcache/CodeQL/2.25.6/x64/codeql/codeql database trace-command --use-build-mode --working-dir /home/runner/work/meridian/meridian /home/runner/work/_temp/codeql_databases/rust Running command in /home/runner/work/meridian/meridian: [/opt/hostedtoolcache/CodeQL/2.25.6/x64/codeql/rust/tools/autobuild.sh] [] [build-stderr] Scanning for files in /home/runner/work/meridian/meridian... [] [build-stderr] /home/runner/work/_temp/codeql_databases/rust: Indexing files in in /home/runner/work/meridian/meridian... [] [build-stderr] Running command in /home/runner/work/meridian/meridian: [/opt/hostedtoolcache/CodeQL/2.25.6/x64/codeql/rust/tools/index-files.sh, /home/runner/work/_temp/codeql_databases/rust/working/files-to-index18405270784628430353.list] [] [build-stdout] [] [build-stdout]  INFO configuration: { [] [build-stdout] [] [build-stdout] scratch_dir: "/home/runner/work/_temp/codeql_databases/rust/working", [] [build-stdout] [] [build-stdout] trap_dir: "/home/runner/work/_temp/codeql_databases/rust/trap/rust", [] [build-stdout] [] [build-stdout] source_archive_dir: "/home/runner/work/_temp/codeql_databases/rust/src", [] [build-stdout] [] [build-stdout] diagnostic_dir: "/home/runner/work/_temp/codeql_databases/rust/diagnostic/extractors/rust", [] [build-stdout] [] [build-stdout] cargo_target_dir: None, [] [build-stdout] [] [build-stdout] cargo_target: None, [] [build-stdout] [] [build-stdout] cargo_features: [], [] [build-stdout] [] [build-stdout] cargo_cfg_overrides: [], [] [build-stdout] [] [build-stdout] cargo_extra_env: {}, [] [build-stdout] [] [build-stdout] cargo_extra_args: [], [] [build-stdout] [] [build-stdout] cargo_all_targets: false, [] [build-stdout] [] [build-stdout] logging_flamegraph: None, [] [build-stdout] [] [build-stdout] logging_verbosity: Some( [] [build-stdout] [] [build-stdout] "progress", [] [build-stdout] [] ... --- **GitHub Actions: CI / 1_Migrations append-only.txt**: promote: pre-main → main Conclusion: `failure` [View job details](https://api.github.com/repos/Meridiona/meridian/check-runs/76784850245/annotations) :::text ##[group]Run base='8a5a7b9fd961ea1aac69c2c51b51aa1ccb7ddaf3' base='8a5a7b9fd961ea1aac69c2c51b51aa1ccb7ddaf3' violations=$(git diff --name-status "$base"...HEAD -- src/migrations \  | grep -E '^(M|D|R)' || true) if [ -n "$violations" ]; then  echo "::error::Shipped migrations are immutable. Add a NEW numbered migration in src/migrations/ — never modify, rename, or delete an existing one (it changes the sqlx checksum and breaks every database that already applied it)." --- **GitHub Actions: CI / screenpipe MIT pin**: promote: pre-main → main Conclusion: `failure` [View job details](https://api.github.com/repos/Meridiona/meridian/check-runs/76784850245/annotations) :::text ##[group]Run expected="0.4.6" expected="0.4.6" fail=0 # install.sh no longer installs screenpipe (capture is in-process in # the tray since v1.64.0). install-from-bundle.sh still uses it for # the legacy npm-based install path — the pin must stay there. for f in scripts/install-from-bundle.sh; do  v=$(grep -E '^SCREENPIPE_VERSION=' "$f" | head -1 | cut -d'"' -f2)  if [ "$v" != "$expected" ]; then  echo "::error file=$f::SCREENPIPE_VERSION='$v' but must be '$expected' — the last MIT npm release. screenpipe >= 0.4.17 is Commercial-licensed; bumping the pin ships users a commercial dependency. Changing this requires legal review (and editing this guard). See the LICENSE PIN comment at the pin." --- **GitHub Actions: CI / Migrations append-only**: promote: pre-main → main Conclusion: `failure` [View job details](https://api.github.com/repos/Meridiona/meridian/check-runs/76784850245/annotations) :::text ##[group]Run base='8a5a7b9fd961ea1aac69c2c51b51aa1ccb7ddaf3' base='8a5a7b9fd961ea1aac69c2c51b51aa1ccb7ddaf3' violations=$(git diff --name-status "$base"...HEAD -- src/migrations \  | grep -E '^(M|D|R)' || true) if [ -n "$violations" ]; then  echo "::error::Shipped migrations are immutable. Add a NEW numbered migration in src/migrations/ — never modify, rename, or delete an existing one (it changes the sqlx checksum and breaks every database that already applied it)." --- **GitHub Actions: CI / 3_screenpipe MIT pin.txt**: promote: pre-main → main Conclusion: `failure` [View job details](https://api.github.com/repos/Meridiona/meridian/check-runs/76784850245/annotations) :::text ##[group]Run expected="0.4.6" expected="0.4.6" fail=0 # install.sh no longer installs screenpipe (capture is in-process in # the tray since v1.64.0). install-from-bundle.sh still uses it for # the legacy npm-based install path — the pin must stay there. for f in scripts/install-from-bundle.sh; do  v=$(grep -E '^SCREENPIPE_VERSION=' "$f" | head -1 | cut -d'"' -f2)  if [ "$v" != "$expected" ]; then  echo "::error file=$f::SCREENPIPE_VERSION='$v' but must be '$expected' — the last MIT npm release. screenpipe >= 0.4.17 is Commercial-licensed; bumping the pin ships users a commercial dependency. Changing this requires legal review (and editing this guard). See the LICENSE PIN comment at the pin."
    🧰 Additional context used
    🧠 Learnings (1)
    📓 Common learnings Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Do what has been asked; nothing more, nothing less Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Never create files unless absolutely necessary; prefer editing existing files Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Never create documentation files unless explicitly requested Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Always read a file before editing it Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Never commit secrets, credentials, or `.env` files Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Keep files under 500 lines; split when a file grows beyond that Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Validate all input at system boundaries (config load, DB open, frame parsing) Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Never run `git reset`, `git push --force`, or delete local code Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Never merge a PR automatically; leave the merge to a human reviewer Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Never push directly to `main`; always use a separate feature branch and raise a PR Learnt from: CR Repo: Meridiona/meridian Timestamp: 2026-06-30T10:04:31.876Z Learning: Always use a separate branch per feature/fix, with branch names in `type/short-description` format
    🔇 Additional comments (1)
    services/pyproject.toml (1)
    `7-7`: LGTM!

    📝 Walkthrough ## Walkthrough This PR adds timed and scheduled capture pausing, proposed-ticket drafting and review, local-hour handling across worklog and coding-agent flows, and updated observability plus runtime publishing tooling. ## Changes **Core product flows** |Layer / File(s)|Summary| |---|---| |**Schema, settings, and time helpers**
    `src/migrations/050_proposed_task_worklog.sql`, `src/migrations/051_tracking_pause_gaps.sql`, `meridian-core/src/settings.rs`, `meridian-core/src/util/date.rs`, `services/agents/time_utils.py`, `src/coding_agent_session_ingest/segment.rs`, `ui/lib/settings.ts`|Proposed-task and gap storage are extended, runtime work-hours settings are added, and shared local-time conversion helpers are introduced in Rust and Python.| |**Tray pause state and work-hours enforcement**
    `tray/src-tauri/src/state.rs`, `meridian-core/src/capture.rs`, `src/db/meridian.rs`, `tray/src-tauri/src/commands/daemon.rs`, `tray/src-tauri/src/poll/mod.rs`, `tray/src-tauri/src/lib.rs`, `ui/components/views/SettingsView.tsx`, `tray/src/app.js`, `tray/src/index.html`, `tray/src/style.css`, `ui/components/DayTimeline.tsx`|Tray state gains pause metadata and cancellation senders, timed pause/resume persistence is added, work-hours checks pause and resume capture, and the tray UI renders pause controls, status, and paused timeline bands.| |**Coding-agent hour-boundary and summariser changes**
    `src/coding_agent_session_ingest/segment.rs`, `src/coding_agent_session_ingest/indexer.rs`, `src/coding_agent_session_ingest/db.rs`, `src/coding_agent_session_ingest/summariser/...`, `services/skills/coding-agent/session-summary/SKILL.md`, `src/etl/extractor.rs`, `src/etl/runner.rs`, `src/etl/session_builder.rs`, `tests/etl_coding_agent_skip.rs`|Segmenting, sealing, and summarising coding-agent sessions now follow local clock-hour boundaries, the summariser drops blockers and adds per-source backoff, and ETL filtering skips coding-agent terminal titles in VSCode-like apps.| |**Worklog pipeline and session distiller local-time migration**
    `src/worklog_pipeline.rs`, `services/agents/session_distiller.py`, `services/agents/worklog_pipeline/db.py`|The worklog driver, session distiller, and worklog DB queries switch from UTC hour buckets and string slicing to local-hour labels and UTC ranges, while payload composition gains reasoning support.| |**Proposed-ticket drafting pipeline**
    `services/agents/worklog_pipeline/models.py`, `services/agents/worklog_pipeline/prompts/propose_ticket.py`, `services/agents/worklog_pipeline/worklog.py`, `services/agents/worklog_pipeline/pipeline.py`, `services/agents/worklog_pipeline/workflow.py`, `services/agents/worklog_pipeline/db.py`|Proposal schema, prompt, worklog drafting, tracing, and persistence are extended so approved proposals carry reasoning, a drafted worklog payload, and local-hour window metadata.| |**Proposed-ticket readers, commands, and UI**
    `meridian-core/src/readers/proposed.rs`, `meridian-core/src/readers/worklogs.rs`, `meridian-core/src/lib.rs`, `tray/src-tauri/src/commands/worklogs.rs`, `tray/src-tauri/src/lib.rs`, `ui/lib/api-types.ts`, `ui/components/views/WorklogsView.tsx`, `ui/components/views/TodayView.tsx`|Core reader APIs, Tauri commands, and worklog UI render proposed tickets inline with editable title/body, approval actions, and new proposed-item metadata.| |**Approved proposal ticket creation**
    `src/pm_worklog/create.rs`, `src/pm_worklog/db.rs`, `src/pm_worklog/post.rs`, `src/pm_worklog/mod.rs`|Approved proposals are fetched, converted into provider tickets, persisted as worklogs, and marked created through a new multi-provider creation path.| |**Provider and ticket-update integrations**
    `src/intelligence/providers/linear/...`, `src/intelligence/ticket_update/...`, `tray/src-tauri/src/commands/integrations.rs`, `tray/src-tauri/src/commands/triage.rs`, `ui/components/IntegrationConnect.tsx`, `ui/components/HygieneDialog.tsx`|Linear grouping changes, ticket-update helper tests, Trello credential handling, OAuth prompting, subprocess working-directory fixes, and dialog error handling are updated together.| **Observability, dashboards, and release tooling** |Layer / File(s)|Summary| |---|---| |**Tracing, dashboards, and service observability**
    `services/agents/observability.py`, `services/agents/server.py`, `services/agents/routes/...`, `services/observability/dashboards/*`|OpenTelemetry setup changes to direct OTLP export and agno tracing, service tracers are renamed, routes add richer span/log metadata, and new dashboards are added for activity, worklog-hour, and session-distiller views.| |**Runtime gates, release workflow, and docs**
    `.github/workflows/*`, `scripts/*`, `CLAUDE.md`, `services/pyproject.toml`, `scripts/README.md`, `dev-start.sh`, `install.sh`, `.cargo/config.toml`, `.gitignore`|Runtime version gating, publishing scripts, release workflows, and supporting developer docs/configuration are added or updated together.| ## Estimated code review effort 🎯 5 (Critical) | ⏱️ ~120 minutes ## Possibly related PRs - [[Meridiona/meridian#324](https://github.com/Meridiona/meridian/issues/324)](https://github.com/Meridiona/meridian/pull/324): It touches the tray capture wiring and engine startup path that this PR extends with pause/resume and schedule control. - [[Meridiona/meridian#324](https://github.com/Meridiona/meridian/issues/324)](https://github.com/Meridiona/meridian/pull/324): It touches the tray capture wiring and engine startup path that this PR extends with pause/resume and schedule control. ## Poem > 🐇 Hoppity-hop, the clock knows local time now, > Pauses and proposals both know when and how. > Dashboards glow softly, the trail stays in view, > A bunny left carrots of code, shiny and new.
    🚥 Pre-merge checks | ✅ 4 | ❌ 1 ### ❌ Failed checks (1 warning) | Check name | Status | Explanation | Resolution | | :---------------: | :--------- | :------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------- | | Description check | ⚠️ Warning | The description is on-topic but misses most required template sections, especially testing, checklist, and related issues. | Add the required sections: what the PR does, how it was tested, checklist items, and related issue references. |
    ✅ Passed checks (4 passed) | Check name | Status | Explanation | | :------------------------: | :------- | :----------------------------------------------------------------------------------- | | Title check | ✅ Passed | The title accurately summarizes the main change: promoting pre-main into main. | | 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`

    Comment @coderabbitai help to get the list of available commands.

     
  • Anonymous

    Anonymous - 2026-06-30

    Originally posted by: Akarsh-Hegde

    Promotion review pass — complete ✅

    Worked through all 49 review threads (CodeRabbit + code-quality bot) and the merge conflict.

    Merge conflict — resolved. Merged main into pre-main; the only conflict was services/pyproject.toml, resolved to 1.67.0 (> live runtime-latest 1.66.2) so the auto-publish gate fires on promotion. The WORKLOG_SYSTEM re-export survived the merge.

    Threads — all 49 resolved:

    • 1 false positiveworklog.py:11 "WORKLOG_SYSTEM unused" is a re-export consumed by pipeline.py; removing it would reintroduce the bug this promotion fixes.
    • 1 resolved in-PR — the pyproject.toml version (the 1.67.0 fix above).
    • 47 pre-existing — these shipped to staging via individual feature PRs; CodeRabbit re-reviewed the full ~8.2k-line cumulative diff. Per the agreed scope, they're not rewritten inside this prod promotion (urgently needed to ship the worklog runtime fix), and are tracked in #376 — including the 🔴 idempotent-ticket-creation item and the IST-hardcoded observability dashboards, which are worth prioritising.

    Net: the conflict is gone and every conversation is resolved. The only thing this promotion changes beyond the cumulative feature work is the version bump to 1.67.0. Follow-ups live in [#376].

     

    Related

    Tickets: #376

  • Anonymous

    Anonymous - 2026-06-30

    Ticket changed by: Akarsh-Hegde

    • status: open --> closed
     

Log in to post a comment.