Skip to content

Bump rails_pulse from 0.4.1 to 0.5.0 - #467

Closed
dependabot[bot] wants to merge 1 commit into
developfrom
dependabot/bundler/rails_pulse-0.5.0
Closed

dependabot[bot] wants to merge 1 commit into
developfrom
dependabot/bundler/rails_pulse-0.5.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Oct 22, 2026

Copy link
Copy Markdown

Bumps rails_pulse from 0.4.1 to 0.5.0.

Release notes

Sourced from rails_pulse's releases.

v0.5.0

  • JSON API, rails-pulse CLI, and MCP server. A read-only JSON API under /rails_pulse/api/v1, a rails-pulse executable, and an MCP server (rails-pulse mcp) give scripts, CI, and coding agents access to everything the dashboard shows: routes, requests, queries, jobs, job runs, exceptions, and deployments. rails-pulse install claude installs a Claude Code skill and rails-pulse install agents writes a Rails Pulse section into AGENTS.md.

  • Rails Pulse Cloud sync. With config.cloud.api_key and config.cloud.application set, hourly summaries, exception groups, deployments, and a per-minute health update are sent to Rails Pulse Cloud — never request URLs, SQL values, or exception messages. rails rails_pulse:cloud:preview prints exactly what would be sent. Set up with rails generate rails_pulse:install_cloud, migrate, and schedule RailsPulse::CloudHealthJob every minute.

  • Deployment before-and-after comparison. The deployments API, CLI, and MCP tool report whether each release made response time or error rate materially worse in the hour after the deploy than the hour before — or whether there was too little traffic to tell.

  • Insights: what needs attention, and whether your thresholds fit. The insights endpoint, rails-pulse insights show, and the rails_pulse_insights tool list routes, queries, and jobs past their thresholds over an hour, day, week, or month, and suggest an initializer change when a threshold is too noisy or never fires.

  • Coverage reporting for agents. rails-pulse coverage show reports what has been recorded, how recently, and any collection gaps, so missing data isn't mistaken for an all-clear.

  • Dropped requests are now visible. Each background writer records a per-minute heartbeat (queue depth and drops) into a new rails_pulse_events table. The dashboard shows a Tracking badge when a writer is backlogged or dropping, the Storage page lists every live writer, and rails rails_pulse:status exits 1 when anything was dropped in the last hour.

  • Richer rails rails_pulse:status. It now also checks whether the API and deployment tokens are set, whether SummaryJob has skipped hours, whether CleanupJob is running, hourly summary retention, and job tracking.

  • Time zone transparency. Every chart carries a zone badge, tooltips state the zone, and the custom date range picker says which zone its inputs are read in.

  • A query is the same query however many values it loads. WHERE id IN (…) with 3 ids and with 12 ids are now one entry instead of separate queries, each with its own stats, N+1 flags, and EXPLAIN. Entries recorded by earlier versions keep their old form until retention removes them.

  • Daily, weekly, and monthly summaries roll up from shorter periods instead of raw rows, so the summary job's memory no longer grows with period length or retention caps, and longer periods stay complete after raw data is pruned.

  • Hourly summaries are kept for 7 days instead of 2 (tunable via config.hourly_summary_retention), so deployment comparisons work for deploys from earlier in the week.

  • All timestamps display in the app's config.time_zone rather than the browser's or the server's OS zone.

  • Faster dashboard on large installs. The storage panel uses database row estimates instead of counting every table on each page load, cutting tens of seconds per view on big installs. (#363)

  • Dashboard health bar badges omit zero counts, and the Storage badge appears only under warning or critical pressure.

  • Dropped the request_store runtime dependency in favor of Rails' own ActiveSupport::CurrentAttributes.

  • Normalised SQL no longer leaks some string values (uncommon SQL string forms, MySQL values containing apostrophes, very small or large decimals), which also split a query's stats into one entry per value. (#335, #313)

  • Needs Attention and System Health no longer overcount traffic in windows longer than a day, which could inflate counts and raise an exception group's severity. (#338)

  • Daily charts no longer go blank after a daylight-saving change in zones that observe it.

  • Threshold recommendations no longer suggest a critical threshold equal to very_slow, and the query check reads the period's slowest query.

  • The dashboard no longer reports cleanup as blocked when expired requests are simply waiting for the next daily cleanup.

  • Weekly and monthly summaries now include the period's last day, and backfill dates are read in the app's time zone. (#279)

  • The exception-group row cap now applies to deletable groups only, so preserved and ignored groups no longer cause every cleanup run to delete the oldest deletable groups indefinitely. (#285)

  • Requires Ruby 3.2+ and Rails 7.2+. The previously advertised Ruby 3.1 / Rails 7.1 floors were never tested in CI and are now dropped.

  • Recording a deployment over HTTP requires config.deployment_token. The endpoint no longer accepts a dashboard login in place of the token. Set the token for CI, or use the rails_pulse:record_deployment task.

  • config.deployment_api_token is renamed to config.deployment_token. The old name still works as an alias; the new JSON API reads a separate config.api_token, so a token given to a coding agent cannot record a release.

  • Code that read RequestStore.store[:rails_pulse_request_id] directly (undocumented) must switch to RailsPulse::Current.rails_pulse_request_id.

  • Run rails generate rails_pulse:upgrade and rails db:migrate (or rails db:migrate:rails_pulse on a separate database) after updating. The new rails_pulse_events table is required — tracking pauses until it exists.

  • To use the JSON API, CLI, or MCP server, set config.api_token; to record deployments over HTTP, set config.deployment_token. Add gem "mcp" to your Gemfile to run the MCP server.

  • Queries recorded by earlier versions may appear twice on the Queries page until retention removes the old entries, due to the new value-list normalisation.

  • Run rails rails_pulse:status after upgrading — it exits 1 while anything still needs action.

v0.5.0.pre.2

Release v0.5.0.pre.2

  • Before-and-after comparison for every deployment. The deployments API, rails-pulse deployments list and the rails_pulse_deployments MCP tool now say whether a release made response time or error rate noticeably worse. They compare the hour after the deploy with the hour before it, and say so when there was too little traffic to tell.

  • Insights: what needs attention, and whether your thresholds fit. A new GET /rails_pulse/api/v1/insights endpoint, the rails-pulse insights show command and the rails_pulse_insights tool list the routes, queries and jobs over their thresholds for an hour, day, week or month. When route_thresholds or query_thresholds is too noisy, or never fires, they suggest an initializer line to fix it.

  • Exact lookups. The API, CLI and MCP tools can now find a query by hashed_sql, an exception group by fingerprint, a route by exact path and controller action, a deployment by revision, and requests by path prefix.

  • rails rails_pulse:status checks how the install runs. It now reports skipped SummaryJob hours, whether CleanupJob is running, how long hourly summaries are kept, and whether jobs are tracked, with a suggestion for each. These suggestions never change the exit status. Each cleanup run is now recorded in rails_pulse_events.

  • A query counts as one query however many values it loads. WHERE id IN (…) with 3 ids or 12, and a batch insert of 2 rows or 50, now share one entry with one set of stats, N+1 flags and EXPLAIN plan, instead of a separate entry for each size.

  • Hourly summaries are kept for 7 days instead of 2, so deploys from earlier in the week can still be compared. Change it with config.hourly_summary_retention.

  • Faster dashboard on large installs. The storage panel no longer counts every Rails Pulse table on each load. PostgreSQL and MySQL use the database's row estimates, and SQLite leaves exact counts to the Storage page. The storage-pressure checks now run once per page instead of four times.

  • Normalised SQL no longer shows string values written in SQL's less common string forms. On MySQL this also covers values containing an apostrophe and double-quoted values that look like column names, and on every database very small or very large decimals. Each of these used to split one query's stats into one entry per value. PostgreSQL U&'…' strings now normalise to ?. (#335, #313)

  • On MySQL 8, record counts and disk sizes on the dashboard and Storage page are now current, not read from a statistics cache that could be up to a day old. (#363)

... (truncated)

Changelog

Sourced from rails_pulse's changelog.

[0.5.0] - 2026-10-16

[0.5.0.pre.2] - 2026-10-11

Added

  • Before-and-after comparison for every deployment. The deployments API, rails-pulse deployments list and the rails_pulse_deployments tool now say whether each release made things worse: response time or error rate materially worse in the hour after the deploy finished than in the hour before it started, or too little traffic to tell.
  • What needs attention, and whether the thresholds fit. GET /rails_pulse/api/v1/insights, rails-pulse insights show and the rails_pulse_insights tool list the routes, queries and jobs past their thresholds over one hour, day, week or month, and suggest an initializer line when route_thresholds or query_thresholds is too noisy or never fires.
  • Exact lookups for the keys Rails Pulse Cloud holds. The API, CLI and MCP tools can now find a query by hashed_sql, an exception group by fingerprint, a route by exact path and controller action, a deployment by revision, and requests by path prefix, so a Cloud alert leads straight to the local detail.
  • Rails Pulse Cloud sync. With config.cloud.api_key and config.cloud.application set, hourly summaries, exception groups, deployments and a per-minute health update are sent to Rails Pulse Cloud (never request URLs, SQL values or exception messages), and rails rails_pulse:cloud:preview prints exactly what would be sent; to use it, run rails generate rails_pulse:install_cloud, migrate, and schedule RailsPulse::CloudHealthJob every minute.
  • rails rails_pulse:status checks how the install is run. It reports whether SummaryJob has skipped hours and whether CleanupJob is running, how long hourly summaries are kept, and whether jobs are tracked, and lists suggestions for each without changing the exit status. Each cleanup run is now recorded in rails_pulse_events so the task can tell.

Changed

  • A query is the same query however many values it loads. WHERE id IN (…) with 3 ids and with 12 ids, and a batch insert of 2 rows and of 50, used to be tracked as separate queries, each with its own stats, N+1 flags and EXPLAIN; they are now one entry. Entries recorded by earlier versions keep their old form until retention removes them, so a query may appear twice on the Queries page for a while after upgrading.
  • Hourly summaries are kept for 7 days instead of 2. Deployment comparisons and hour-precise change points read them, so at 2 days a deploy from earlier in the week could no longer be compared; config.hourly_summary_retention tunes it.

Fixed

  • Normalised SQL no longer shows some string values. A value written in one of SQL's less common string forms — only possible in hand-written SQL — stayed visible in the normalised query on the dashboard, the API and the MCP server, and split that query's stats into one entry per value; it is now replaced with ? like any other value. On MySQL the same happened to any value containing an apostrophe or any double-quoted value shaped like a column name, and on every database to very small or very large decimals. (#335, #313)
  • The dashboard no longer counts every Rails Pulse table on each load. On PostgreSQL and MySQL its storage panel now shows the database's row estimates, and on SQLite it leaves record counts to the Storage page, so large installs no longer wait tens of seconds per page view; the storage-pressure checks also run once per page instead of four times. On MySQL 8, record counts and disk sizes on the dashboard and the Storage page are read current instead of from a statistics cache up to a day old. (#363)
  • Needs Attention and System Health no longer overcount traffic. Request, error, query and exception counts were added up once per summary granularity, which inflated them and could raise an exception group's severity; today's traffic now counts in windows longer than a day. (#338)
  • Threshold recommendations no longer suggest a critical threshold equal to very_slow or below a rarely run slow query. A suggested critical threshold now sits at least one step above very_slow, and the query check reads the period's slowest query rather than only its most expensive ones.
  • The dashboard no longer reports cleanup as blocked when it is not. The critical "summarize first" Storage item appeared whenever expired requests were waiting for the next daily cleanup, which deletes them by age regardless of summaries; it has been removed, and a stalled summary job is still flagged.
  • PostgreSQL Unicode escape strings (U&'…') are normalised to ? like other prefixed strings, instead of leaving U&? in the normalised query.
  • Daily charts no longer go blank after a daylight-saving change. In a config.time_zone with daylight saving, every day after the clocks changed was drawn empty in a range that crossed the change; chart days now follow the zone's calendar.

[0.5.0.pre.1] - 2026-10-03

Added

  • JSON API, rails-pulse CLI and MCP server. A read-only API under /rails_pulse/api/v1, a rails-pulse executable and an MCP server (rails-pulse mcp; add gem "mcp" to your Gemfile) give scripts, CI and coding agents what the dashboard shows: routes, requests, queries, jobs, job runs, exceptions and deployments. (#309)
  • Coverage reporting for agents. rails-pulse coverage show and the rails_pulse_coverage tool report what has been recorded, how recently, any collection gaps, and which application and environment answered, so missing data is not mistaken for an all-clear. (#309)
  • Fixed windows and drilldown. Every windowed command and tool takes ISO 8601 since/until and reports the window it measured, and rails_pulse_queries takes an endpoint's route_id to show the SQL inside it with the file and line each query came from. (#309)
  • Agent instructions. rails-pulse install claude installs a Claude Code skill, and rails-pulse install agents writes a Rails Pulse section into AGENTS.md, alongside a project's own instructions with --append. (#309)
  • rails rails_pulse:status reports whether the API and deployment tokens are set. (#309)
  • Dropped requests are now visible. Each background writer records a heartbeat once a minute (queue depth and requests dropped since the last one), pruned after a day. The dashboard's health bar gains a Tracking badge, shown only when a writer is backlogged or dropping requests; the Storage page lists every live writer with its queue and drops; and rails rails_pulse:status reports the totals and exits 1 when anything was dropped in the last hour. (#281)
  • A rails_pulse_events table for what Rails Pulse notices rather than measures, starting with the writer heartbeats above. config.event_retention_period (default 90 days) prunes it. Run rails generate rails_pulse:upgrade and migrate; tracking pauses until the table exists.
  • CI now exercises the separate-database upgrade path (bin/test_separate_database_upgrade, SQLite and PostgreSQL), and the migration regression suite gains a 0.3.2 baseline. (#284)
  • Charts say which time zone they are in. Every chart carries a zone badge (hover for the full zone name and the exact window shown), chart tooltips end with the zone, and the custom date range picker states the zone its inputs are read in. (#303)

Changed

  • Daily, weekly and monthly summaries are built from shorter periods instead of raw rows. The summary job's memory no longer grows with the length of the period or with raised retention caps, and longer periods stay complete after raw data is pruned; their P50/P95/P99 are now traffic-weighted from the hours or days below them, as the dashboard already shows for multi-period ranges. A period is summarized only once it ends, so the backfill task no longer writes a partial row for the current day. (#279)
  • config.deployment_api_token is now config.deployment_token. The old name still works and still only records deployments; the JSON API reads a separate config.api_token, so a token given to a coding agent cannot record a release. (#309)
  • Recording a deployment over HTTP requires config.deployment_token. The deployments endpoint no longer accepts a dashboard login in place of the token, which let any page a signed-in admin visited record a release; set the token for CI, or use the rails_pulse:record_deployment task, which needs none. (#309)
  • All timestamps display in the app's config.time_zone. Chart axes and tooltips are formatted in that zone rather than the browser's, so a daily point no longer lands on the wrong calendar day for viewers in another zone. Request, job, exception and operation timestamps also use it instead of the server's OS zone; on a host whose server runs in UTC with a different config.time_zone, those pages now show the configured zone. (#303)
  • Dashboard health bar badges omit zero counts. "26 healthy · 0 slow · 0 critical" now reads "26 healthy"; the Storage badge is shown only under warning or critical pressure.
  • Dropped the request_store runtime dependency. Per-request tracking state now goes through RailsPulse::Current, built on Rails' own ActiveSupport::CurrentAttributes. No configuration or behavior change; a host that read RequestStore.store[:rails_pulse_request_id] directly (undocumented, but reachable) needs to switch to RailsPulse::Current.rails_pulse_request_id. (#277)
  • Requires Ruby 3.2+ and Rails 7.2+. The gemspec advertised Ruby 3.1 and Rails 7.1 but CI never ran them; the floors now match what is tested, and the untested Rails 7.1 and Ruby 3.1 code paths are gone. (#270)

... (truncated)

Commits
  • b323d81 Bump version to v0.5.0
  • 795d1b3 Teach the agent skill the Rails Pulse Cloud MCP workflow (#377)
  • 2aed7a2 Update the dummy app's lockfile to 0.5.0.pre.2
  • 14d8939 Bump version to v0.5.0.pre.2
  • 26aeab6 Bump brakeman, mocha, ransack and sidekiq in the development lockfile (#366)
  • 174c20c Merge 0-5-stable into main (#365)
  • 7867fec Count dashboard summary traffic once per period (#338) (#356) (#357)
  • db7146e Record 0-5-stable as merged into main (#354)
  • 1e0a3f4 Merge 0-5-stable into main (#353)
  • 759e67f Send the Rails Pulse Cloud payload, with retries and a buffer (#348)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [rails_pulse](https://github.com/railspulse/rails_pulse) from 0.4.1 to 0.5.0.
- [Release notes](https://github.com/railspulse/rails_pulse/releases)
- [Changelog](https://github.com/railspulse/rails_pulse/blob/main/CHANGELOG.md)
- [Commits](railspulse/rails_pulse@v0.4.1...v0.5.0)

---
updated-dependencies:
- dependency-name: rails_pulse
  dependency-version: 0.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file ruby Pull requests that update ruby code labels Oct 22, 2026
@yawboakye yawboakye closed this Oct 22, 2026
@dependabot @github

dependabot Bot commented on behalf of github Oct 22, 2026

Copy link
Copy Markdown
Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot
dependabot Bot deleted the dependabot/bundler/rails_pulse-0.5.0 branch October 22, 2026 09:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file ruby Pull requests that update ruby code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant