DebugBundle
Incidents

Incidents

How DebugBundle groups events into incidents using fingerprinting and lifecycle management.

An incident represents a unique problem detected in your application. DebugBundle automatically groups related events into incidents using fingerprinting, tracks their lifecycle, and generates debug bundles for investigation.

Event-to-Incident Pipeline

Events → Normalize → Fingerprint → Group → Incident → Bundle
  1. Ingest — SDKs send events to POST /v1/events. Events are persisted to object storage and queued for processing.
  2. Normalize — The worker normalizes event data (strips dynamic values like UUIDs, timestamps, IP addresses, email addresses).
  3. Fingerprint — A deterministic fingerprint is computed from the normalized message, error type, route template, top stack frames, HTTP method, and HTTP status.
  4. Group — Events with the same fingerprint are grouped into a single incident.
  5. Bundle — Debug bundles are generated at occurrence thresholds (1, 3, 10 events).

Fingerprinting

The fingerprint is a SHA-256 hash computed from these fields (when available):

FieldDescription
environmentDeployment environment (always included).
normalized_messageError message with dynamic values stripped.
error_typeException class name (e.g., TypeError, NullPointerException).
route_templateURL route template (e.g., /api/users/:id).
top_framesTop application stack frames (excluding library/framework frames).
http_methodHTTP method (GET, POST, etc.).
http_statusHTTP response status code.

The matched_fields array on each incident records which fields contributed to its fingerprint, providing transparency into grouping decisions.

Normalization Patterns

Before fingerprinting, dynamic values are stripped from messages:

PatternReplacement
UUIDs[UUID]
Email addresses[EMAIL]
ISO timestamps[TIMESTAMP]
IPv4 addresses[IP]
Hex values[HEX]

This ensures that occurrences of the same underlying error are grouped together regardless of dynamic payload content.

Event Types

Events are classified into three categories:

Event ClassEvent TypesRole
Incident Signalbackend_exception, frontend_exception, qualifying log_event, preset-specific immediate request_event failures (minimal: 5xx; balanced: 5xx plus 408/423/424/425/429; investigative: balanced plus 409), plus any project-selected 4xx statuses from immediate_client_error_statusesCreate/update incidents directly.
Context Signalrequest_event outside the preset's immediate failure set, frontend_breadcrumb, deploy_metadata, probe_event, lower-level log_eventEnrich existing incidents with additional data. Repeated contextual request failures can open request-anomaly incidents without changing the stored event class.
Operational Signalerror_suppressedTracked but may not create new incidents.

Incident Lifecycle

Created

A new incident is created when an incident signal does not match an existing fingerprint.

Open

Matching events continue to update occurrence counts, context, bundles, and alerts.

Resolved

A team member or agent explicitly marks the incident resolved.

Reopened

A new matching event after resolution reopens the incident as a regression.

StateDescription
OpenActive incident, events still arriving. Default state.
ResolvedIncident marked resolved by a team member.
ReopenedA resolved incident that received new matching events (regression).

Resolution

Incidents can be resolved via API, CLI, or MCP:

# CLI
debugbundle resolve inc_01H...
debugbundle resolve inc_01H... inc_01J...

# API
curl -X POST https://api.debugbundle.com/v1/incidents/inc_01H.../resolve \
  -H "Authorization: Bearer dbundle_mem_a1b2c3d4..."
curl -X POST https://api.debugbundle.com/v1/incidents/resolve \
  -H "Authorization: Bearer dbundle_mem_a1b2c3d4..." \
  -H "Content-Type: application/json" \
  -d '{"incident_ids":["inc_01H...","inc_01J..."]}'

# MCP
resolve_incident(incidentId: "inc_01H...")
resolve_incidents(incidentIds: ["inc_01H...", "inc_01J..."])

When an incident is resolved, a bundle.resolved webhook event is fired.

Regression

If new events arrive matching a resolved incident's fingerprint, the incident is automatically reopened and a bundle.reopened webhook event is fired. If the regression correlates with a recent deploy, the regression_after_deploy flag is set and deploy metadata is included in the webhook payload.

Severity

LevelMeaningAuto-Assigned For
lowMinor, informational.Most event types (default).
mediumModerate impact.error_suppressed events and opaque browser-native resource_error captures.
highSignificant, needs attention.backend_exception, non-opaque frontend_exception, immediate request-failure incident signals.
criticalSevere, immediate action required.Manually escalated.

Severity is automatically inferred from event type and signal confidence at grouping time. Opaque browser-native window_error captures infer low because browsers did not expose enough application detail to justify paging-level severity by default. Severity can be manually escalated but not downgraded.

Sources

Incidents can come from two sources:

SourceDescription
LocalGenerated by debugbundle process on local log files.
CloudGenerated from events ingested via POST /v1/events.

Use --source filters to view incidents from a specific source:

debugbundle incidents
debugbundle incidents --source cloud
debugbundle incidents --source local

Next Steps

Context and log metadata

Incident detail includes Context for one-call evidence with explicit pending or failed artifacts, and Logs for bounded event metadata. Filter logs by level, choose 1–100 records per page and follow cursors. Raw sensitive log messages are not introduced by this view; bounded redacted bundle context remains in the bundle tab.

On this page