Releases: AnjanJ/rails_error_dashboard
v0.5.12
Bug Fixes
Request context capture (#106)
Fixed controller exceptions recording wrong request_url ("application.action_dispatch"), empty request_params, wrong user_agent ("Rails Application"), and missing controller_name/action_name. The subscriber now enriches context from the Rack env stored by our middleware. Duplicate reports are deduplicated to prevent occurrence_count inflation with async logging.
Request params in async logging
Fixed request_params always being {} when async_logging = true. The ErrorContext value object now preserves pre-serialized params through the async job path.
Docker build safety (SECRET_KEY_BASE_DUMMY)
All runtime features (error subscriber, TracePoint hooks, crash capture, issue tracker wiring) are now skipped when SECRET_KEY_BASE_DUMMY is set. Prevents infinite retry loops and Postgres connection failures during assets:precompile in Docker builds. Credential-dependent validations (Slack/Discord/PagerDuty webhooks, issue tracker tokens) also skip during builds.
crash_capture_path auto-creation
The validator now auto-creates the crash capture directory instead of failing with "does not exist". Works for fresh deploys and first boot.
Settings page auto-detect display
Issue tracker provider and repository now display their auto-detected values (from git_repository_url) instead of showing "Not set".
Turbo Stream broadcast route helpers
Fixed undefined method 'error_path' when broadcasting new/updated errors via Turbo Streams. The _error_row partial now uses engine-prefixed route helpers.
Upgrade
gem "rails_error_dashboard", "~> 0.5.12"If you were using SECRET_KEY_BASE_DUMMY workarounds in your initializer, you can now remove them — the gem handles this automatically.
v0.5.9
What's New in v0.5.9
Platform as Source of Truth
The error dashboard now mirrors your issue tracker's state in real-time:
- Issue status — Open/Closed badge fetched from GitHub/GitLab/Codeberg API
- Assignees — Avatars and usernames displayed as rounded pills
- Labels — Color-matched badges from your platform
- Comments — Real platform comments shown in the Discussion section with avatars and timestamps
All data cached 60 seconds. Read-only — the platform is authoritative.
Workflow Controls Adapt
When enable_issue_tracking = true:
- Mark as Resolved, Workflow Status, Assigned To, and Priority are hidden from the sidebar — the platform handles these
- Snooze and Mute remain (no platform equivalent)
- When issue tracking is disabled, all controls remain as before
UX Improvements
- Create Issue opens the new issue in a new tab and scrolls to the Issue Tracker section
- Scrollable breadcrumbs — 400px max height, no more endless page push
- Issue pill in section navigation for quick-jump
- View Issue button in card header (matches Discussion pattern)
- Removed Unlink button and duplicate Discuss button
GitHub Sponsors
Now the primary funding option — Sponsor on GitHub
Full Changelog: v0.5.8...v0.5.9
v0.5.8
What's New in v0.5.8
GitHub/GitLab/Codeberg Issue Tracking
Full issue tracker integration with three tiers:
- Manual: "Create Issue" button + "Link Existing Issue" on error detail page. Supports GitHub, GitLab, and Codeberg/Gitea/Forgejo with auto-detection from
git_repository_url - Auto-create: Configurable — on first occurrence and/or severity threshold (
:critical,:high). Background jobs with circuit breaker - Lifecycle sync: Resolve error → close issue. Error recurs → reopen issue + comment. Throttled recurrence comments (max 1/hour). All async via ActiveJob
- Two-way webhooks:
POST /red/webhooks/:providerwith HMAC verification (GitHub SHA256, GitLab token, Codeberg/Gitea SHA256). Issue closed/reopened on platform → syncs to dashboard
RED Branding
- Dashboard header shows RED (Rails Error Dashboard)
- New installs mount at
/red(existing/error_dashboardworks for backward compatibility) - All issues and comments include "Created by RED" footer with link
- Installer guides users to create a dedicated RED bot account
ActiveStorage Service Health
Track file uploads, downloads, deletes, and existence checks across any ActiveStorage backend (Disk, S3, GCS, Azure). Dashboard page at /errors/activestorage_health_summary with per-service operation counts, avg/slowest durations.
Codeberg/Gitea/Forgejo Source Code Linking
GithubLinkGenerator now detects codeberg.org, gitea.*, and forgejo.* URLs. Uses /src/commit/ for SHAs and /src/branch/ for branch names.
Comment System Replaced
Manual comment form removed. Discussion now lives on your issue tracker:
- Linked issue → "Discuss on GitHub/GitLab" button
- Workflow audit trail (snooze, mute, status changes) preserved as read-only "Activity Log"
Copy for LLM Fixes
- Backticks and quotes no longer escaped in clipboard output
[FILTERED]variables omitted entirely (no debugging value for LLMs)
Full Changelog: v0.5.7...v0.5.8
v0.5.7
What's New in v0.5.7
Copy for LLM — Major Quality Upgrade
The "Copy for LLM" button now produces significantly better output for AI-assisted debugging:
New: Source code snippets — Reads the actual Ruby code (±3 lines context) for the top 3 app backtrace frames. The crash line is marked with >. The LLM can now see what the code does, not just where it crashed.
New: Request params & user agent — Request parameters pretty-printed as JSON, plus the user agent string.
New: Full system health — Expanded from 4 metrics to include process memory (RSS/peak/swap), GC context, DB pool health, file descriptors, system load, system memory, and TCP connections.
Optimized for signal-to-noise — Removed process-wide metrics that don't help debug specific errors (RubyVM, YJIT, ActionCable, Puma, job queue stats) and human workflow fields (severity, status, priority, assigned_to, IP). Added controller#action and user ID.
Fixed
- Markdown now copies with real newlines (was rendering literal
\n) - Handles both plain ErrorLog and wrapped related error objects
- Correctly extracts
_self_classfrom serialized hash format
Full Changelog: v0.5.6...v0.5.7
v0.5.6
What's New in v0.5.6
Fixed
-
Copy for LLM rendered literal
\ninstead of newlines — Markdown now copies with real newlines, rendering correctly in editors and LLMs -
Copy for LLM crashed on related errors —
related_errorsreturns plainErrorLogobjects, not wrapped objects with.similarity/.erroraccessors. Now handles both formats gracefully -
Instance variable
_self_classrendered as raw hash — When stored as a serialized hash, the formatter now extracts the class name correctly
Full Changelog: v0.5.5...v0.5.6
v0.5.5
What's New in v0.5.5
Fixed
- Default credentials check blocked users who explicitly set ENV vars —
default_credentials?compared values regardless of source, soERROR_DASHBOARD_USER=gandalfset deliberately as an ENV var would still be blocked. Now checksENV.key?first — if you explicitly set the ENV vars, your choice is respected even if the values match the defaults.
Full Changelog: v0.5.4...v0.5.5
v0.5.4
What's New in v0.5.4
Fixed
- Docker build crash with default credentials check —
assets:precompileruns in production mode withSECRET_KEY_BASE_DUMMY=1but without runtime ENV vars likeERROR_DASHBOARD_USER. The v0.5.3 credential validation would crash the build. Now skips the check whenSECRET_KEY_BASE_DUMMYis set.
Full Changelog: v0.5.3...v0.5.4
v0.5.3
What's New in v0.5.3
Added
-
"Copy for LLM" button on error detail page (#94) — One-click copy of error details as clean Markdown, optimized for pasting into an LLM session. Conditional sections: app backtrace (framework frames filtered), exception cause chain, local/instance variables, request context, breadcrumbs (last 10), environment, system health, related errors with similarity %, and metadata. Sensitive data stays
[FILTERED]. Thanks @paul! -
Default credentials protection — App refuses to boot in production with
gandalf/youshallnotpassor blank credentials (raisesConfigurationError). Dashboard shows a reminder banner in all environments until credentials are changed
Fixed
-
MySQL index key too long on swallowed_exceptions (#96) — Composite unique index totalled 5042 bytes under
utf8mb4, exceeding MySQL's 3072-byte InnoDB limit. Reduced string column limits from 255/500/500 to 250/250/250 (3022 bytes total). Includes fix migration for existing installations. Thanks @gmarziou! -
Install generator matched config values inside comments — The
detect_existing_configregex foruse_separate_databaseanddatabasename could match commented-out lines, causing single-DB apps to be misidentified as separate-DB on upgrade. Both regexes now anchored to skip comments
Full Changelog: v0.5.2...v0.5.3
v0.5.2
What's New in v0.5.2
Added
- Deep runtime insights in system health snapshot — 6 new metric groups captured at error time, all from Linux procfs reads and Ruby APIs (zero subprocess calls, <1ms budget). Color-coded danger indicators in sidebar view:
- Process memory: swap_mb, rss_peak_mb, os_threads
- File descriptors: open count vs ulimit with utilization %
- System load: 1/5/15m averages, CPU count, load ratio
- System memory: total/available/used%, swap used
- GC context: last major/minor, trigger reason, current state
- TCP connections: established/close_wait/time_wait/listen counts
Fixed
- Migration duplication on generator re-run (#93) — Re-running
rails generate rails_error_dashboard:installafter upgrade no longer duplicates migrations into wrong directory. Generator detects existing initializer config, checks bothdb/migrate/anddb/error_dashboard_migrate/, and preserves existing configuration. Thanks @gmarziou!
Full Changelog: v0.5.1...v0.5.2
v0.5.1
What's New in v0.5.1
Fixed
- Missing ActionCable nav link in dashboard sidebar — Users had no way to navigate to the ActionCable health summary page from the dashboard UI. Added a nav link with broadcast icon, visible when
enable_actioncable_trackingandenable_breadcrumbsare both enabled. Matches the existing pattern for Rate Limits, Job Health, and DB Health links.
Full Changelog: v0.5.0...v0.5.1