Skip to content
Docs menu

Incidents and fixes

When something breaks, Medic gathers evidence across your connections, finds the root cause, and proposes fixes. You approve each fix. Medic applies it and only calls the incident resolved after the signals that showed the problem are healthy again.

How incidents open

There are two ways an incident starts:

  • The incident watcher checks linked resources every minute with read-only calls. When a rule fires, it opens an incident and Medic starts at once. An owner can turn the watcher off for the workspace in Settings, Approvals and limits.
  • Report incident on the Incidents page. Pick the resources that look broken, say what you see if you like, and choose a severity or let Medic decide. Medic looks back 60 minutes from the report by default.

There is one open incident per group of related resources. A new signal or report that touches an open incident joins it instead of opening another, and an incident on a related resource can take over an older one (the older one shows as merged, with a link).

What the watcher checks

SignalFires when
Health checkECS tasks stop for failing health checks, or running Kubernetes pods fail their readiness probe
ECS deployment failedA service's newest deployment is marked failed
ECS tasks stoppedTasks stop with a non-zero exit code, out-of-memory included
Log error spikeError lines in the last 5 minutes at 3 times the rate of the 25 minutes before, at least 5
Database CPU or latencySlow queries, or RDS CPU and read latency both well above their baseline
Load balancerA jump in 5xx responses, unhealthy targets for 2 minutes, or response times 3 times their baseline
LambdaA rise in errors or throttles compared with the minutes before
EC2 status checkAn instance's system or instance status check is impaired
Kubernetes rolloutA Deployment passes its progress deadline, or a StatefulSet's rollout is stuck
Kubernetes podsPods crash-loop, cannot pull their image, or exit with an error, out-of-memory included

The watcher reads only what discovery found, through the same read-only access. A check that fails is skipped and logged; it never opens an incident by itself.

How Medic investigates

An investigation is a run you can follow live on the incident page. Medic works in this order:

  1. Gather

    Logs, metrics, and state for the affected resources and their neighbours on the map: the database a service reads, the secret it uses, the log group it writes to, recent commits and workflow runs, and recent deploys. Each line is redacted and gets a stable evidence id.

  2. Remember

    Looks for similar past incidents in this workspace. A close match's diagnosis or fix can be reused, and the incident says so.

  3. Research

    Searches the web for the most distinctive error, keeping at most 3 results, which are listed on the incident.

  4. Diagnose

    Medic, on NVIDIA Nemotron Ultra, writes the root cause from the evidence. Every claim must cite evidence ids. Claims that cite nothing real are dropped, and the incident lists what was dropped.

  5. Propose

    One or more fixes, in order, each with its own approval. Then apply, verify, and remember.

Reading the root cause

The incident page shows:

  • A one-line summary and the root cause, with a confidence of high, medium, or low.
  • Each claim with links to the exact evidence lines it rests on.
  • The triggering change when Medic found one: a commit, a deploy, a secret that changed, or a config change.
  • A timeline with the signals and the changes around them.
Note:

Medic never reads secret values or your data. For a changed secret it sees that a new version became current and when, not what is in it.

Fixes

Medic prefers a lasting fix in your repository, and adds a quick fix only when production is hurting now.

Pull requests

A fix pull request changes code or infrastructure code in your repository. The approval card shows the files and the diff. Approve and open PR opens it on a new groundcrew/fix-* branch. Groundcrew never pushes to your default branch and never merges. Your normal review, checks, and pipeline do the rest.

Emergency actions

When production is down, or degraded with a high-confidence cause and a known way back, Medic also proposes an emergency action and puts it first. The card shows the plan as before and after lines. Approve and run runs it once.

When one fix depends on another, the card says Runs after the first one. A failed emergency fix can be planned again with a new approval.

Emergency actions

These need emergency fixes turned on for the connection, and by default only owners approve them (an owner can let approvers approve them too).

ActionWhat it does
Roll back an ECS servicePoints the service at the previous task definition revision
Restart an ECS serviceStarts new tasks on the same revision
Roll back a secretMakes the previous Secrets Manager version current again, without reading either value
Roll back a Lambda aliasPoints the alias at the previous published version
Reboot an EC2 instanceOnly when it is running with an impaired status check
Undo a Kubernetes rolloutPuts a Deployment or StatefulSet back on its previous revision
Restart a Kubernetes rolloutRestarts the pods of a Deployment or StatefulSet

Each action reads the current state into a plan first. When it runs, it checks the state again: if it changed since you approved, nothing is written and the fix shows as failed with the reason. A changed Kubernetes ConfigMap or Secret gets a note instead of an action, because Groundcrew cannot restore what it never reads.

Verify and resolve

After a fix is applied, Medic re-checks the signals that opened the incident: the rollout, the health check, the error rate, and metrics such as database CPU and latency. When they are healthy the incident resolves with the time to detect and to recover. If they stay bad until the check times out, the incident fails and says what is still failing.

When Medic finds no fix, it waits 90 seconds for related signals before giving up, so a second symptom can join the incident and lead to a better diagnosis. You can stop an investigation at any time with Stop: its pending approvals are rejected and the incident closes as failed.

Follow-ups

A rollback can bring production back while the cause is still in your repository. Groundcrew tracks that so the next deploy does not bring the failure back:

  • A fix pull request that is still open when the incident resolves becomes a follow-up. Groundcrew watches it until it is merged and a successful deploy workflow on the base branch contains the merge.
  • If the incident was resolved by a rollback with no fix pull request, and Medic knows the commit that caused it, the incident shows "Running on a rollback" until a deploy no longer contains that change. A person can dismiss it.

Follow-ups are checked read-only through the GitHub App, for 7 days. The Overview page counts incidents with a permanent fix still pending.

Incident statuses

StatusMeans
Open, investigatingMedic is gathering evidence and diagnosing
Waiting approvalA fix is ready and waits for an owner or approver
Applying, verifyingAn approved fix is running, or its result is being checked
ResolvedThe signals are healthy again after the fix
FailedNo fix worked, none was approved, or the investigation was stopped
MergedA newer incident on a related resource took this one over

Filter the Incidents list by status, severity, and time range. To hear about incidents in Slack or by email, see Notifications.