Qalibr docs — your guide to bug intake intelligence. Start a free trial →
Using Qalibr

Reports

Reports answers four questions about your intake, in this order:

  1. Intake funnel — of everything that arrived, what reached your team?
  2. Recurrence radar — what is coming back?
  3. Process health — is triage getting better or worse?
  4. Where the pain is — and where you disagreed with us.

Read it in that order. Each section is a different cut of the same window, and a few of them use the same words for different numbers on purpose. This page explains what each figure counts, and — just as important — what it does not.

One clock

Every figure on the page is windowed on when a report arrived, in UTC, over a range that includes the start instant and excludes the end. Not when it was decided, not when its ticket closed, and not in your local timezone. The header prints the exact range it used.

Pick a window with the 7D / 30D / 90D / 365D chips. There is no custom date range.

How far back you can look depends on your plan:

PlanHistory
Trial90 days
Starter30 days
Growth90 days
Scale, Enterprise365 days

If you ask for more than that, Qalibr serves the window you’re entitled to and says so above the figures rather than quietly showing less. A second limit can bind first: records past your retention window were deleted, so no plan can show them. When retention is what’s limiting you, the page says that instead of offering an upgrade that wouldn’t help.

Figures are cached for up to a minute. If you approve a bug and refresh immediately, give it a moment.

01 · Intake funnel

Reports arrived is every report that reached Qalibr in the window — from Slack and pasted by hand — counted at the moment it arrived. It includes reports still in flight and reports that failed. It excludes runs your plan limit blocked; those appear nowhere on this page.

Underneath, twelve rows break that total down. The breakdown is a true partition: every report lands in exactly one row, and the rows always sum to the arrived total. If they ever didn’t, the page would refuse to render rather than show you a breakdown that doesn’t add up. The line under the table states the sum it checked.

Precedence, not overlap. The rows are numbered in cascade order and the first match wins. A report that is both a duplicate and a question counts once, as a duplicate. This is why the rows are numbered — the number is the order the question was asked.

GroupRows
Reached your teamRouted — ticket created
Held back — resolved against an existing ticketDuplicate
Held back — not a bugUser error · Question · Feature request · Operational support · Too thin to act on
Held back — no decision was reachedExpired undecided · Rejected by you
Still moving — not decided yetWaiting on review · Not yet decided
Could not be processedCould not be processed

Too thin to act on is not one field. It’s a report Qalibr called ambiguous, or one whose severity read was uncertain or whose context was too sparse and which then ended up rejected or expired.

Every share on this page divides by the arrived total — all reports, including the held-back ones. Never by a sub-stage.

⚠️

The Duplicate row here and the Dedup rate · 30d tile on your Inbox home will not agree, and that is deliberate. They count different sets over different clocks. Only the funnel’s definition appears on this page.

02 · Recurrence radar

Tickets that keep coming back, ranked by strength of evidence rather than by count. A ticket with one operator-confirmed recurrence outranks one with four reports that nobody has confirmed.

StrengthWhat it means
Human-attestedSomeone reopened this ticket, or rejected a report as a duplicate of it. A person confirmed the recurrence.
Reported against a closed ticketA new report matched this ticket while it was already closed.
Repeat reports onlyTwo or more reports in the window pointed at the same ticket.

A ticket earns a row when two or more distinct reports in the window contributed to it, or when a single report was human-attested. The report that originally opened the ticket usually sits outside the window, which is why one confirmed recurrence is enough.

Tracker-side signals — a silent reopen (a ticket your team reopened with no report explaining it) and the ticket’s true close date — depend on tracker state history, which Qalibr only began recording on 26 July 2026 and cannot backfill. On a window reaching further back, the section says it is still accumulating rather than showing you a zero. That distinction matters: “no silent reopens” and “we cannot see that far back” are different answers.

“Nothing came back this period” is a good result, not missing data — and the page says so.

The radar lists at most 8 tickets, while the “N tickets” caption counts every qualifying ticket. If the caption is larger than the list, the rest are real — there is just no show more.

03 · Process health

Four figures, each compared against the immediately preceding period of the same length.

Median / p90 time to decision — from the moment a report arrived to the moment it was decided, over reports that reached a terminal state. The caption prints how many reports the median was computed over. An expired approval is timed at its deadline, not at the moment Qalibr noticed it had lapsed, so a lapse discovered eight hours late doesn’t read as an eight-hour decision.

Waiting on review — a live snapshot of the queue right now. It is the only one of the four with no comparison against the previous period, because nothing records when a report entered review, so the same question cannot honestly be asked about a past instant.

Expired undecided — a rate whose denominator is approvals that finished, not all reports. Read it as “of the approvals that reached an end, this share ended by lapsing” — not “this share of my reports expired”. The caption prints both numbers.

Time to fix (routed → closed) — from the routing decision to the moment your tracker recorded the ticket as genuinely fixed. A Jira Won’t Do or Duplicate does not count as a fix. This reads entirely off tracker state history, so like the radar’s tracker signals it is withheld until enough history has accrued — the panel tells you when the first useful reading is expected. It is never shown as zero in the meantime.

⚠️

“Waiting on review” and “Expired undecided” appear twice on this page and mean two different numbers. In the funnel they count what fell through to that status with no other explanation, because the classification rows are asked first. Here they count everything currently in that status. The process figure is always the larger one, and both are correct.

04 · Where the pain is

By channel — the top 5 Slack channels by report volume, counting all arrived reports including held-back ones. The shares divide by your whole intake, so the five listed will not add to 100%. A row showing a raw channel id instead of a name is not a bug: those reports arrived before Qalibr started capturing channel names.

By severity — over routed reports only, showing all four tiers plus an explicit Not scored row. The four tiers deliberately do not reach 100%; the residual is that row, and it’s mostly reports routed before Qalibr recorded severity at all.

Your corrections — routed reports whose severity you set by hand. Qalibr overwrites the severity it proposed rather than keeping both, so the raised / lowered split is not available — only the total. On a 90- or 365-day window the share reads low: the count could only start being recorded on 22 July 2026, while the denominator covers the whole window. The panel says so and withdraws its claim that the total is exact.

Rules that never fired — rules with no match inside this window, telling “no matches ever” apart from “no matches in this window”. The denominator is every rule that existed during the window, including disabled ones — so it is not a count of your currently-active rules.

Calibration — the only figure on this page that ignores the window entirely. It’s a lifetime count of routed bugs toward the calibration threshold, so it will not change when you switch from 7D to 365D.

What Reports does not do

Stated plainly, so you don’t go looking:

  • No export. No CSV, no PDF, no download, no scheduled or emailed digest.
  • No custom date range. Four presets only.
  • No money or hours figure. Those live on Value.
  • No per-person breakdown. The only place a person is named is the operator who attested a recurrence on a radar row.
  • No filtering or segmentation. You cannot filter the page, and the only breakdown dimension anywhere on it is the Slack channel a report arrived in.
  • No per-project or per-tracker split. If you run both Linear and Jira, radar rows and time-to-fix mix both with no tracker label.
  • No previous-period comparison outside the four Process health figures — and not on Waiting on review even there.
  • No drill-down except the report links on a radar row, which open the bug in your Inbox.

Why a number is missing rather than zero

Several things Qalibr measures started being recorded on a specific date and cannot be reconstructed backwards. Where that’s true, the page marks the series with its start date and a coverage bar instead of drawing a flat line at zero.

SeriesReal data startsWhat you’d otherwise misread
Tracker state history26 Jul 2026Silent reopens and time-to-fix reading as “none”
Severity overrides22 Jul 2026Your corrections reading as a smaller share
Severity25 May 2026Routed reports landing in Not scored
Classification labels25 May 2026
Duplicate resolutions20 May 2026The Duplicate row reading as a flat 0% before that date

The last one is the one worth knowing about: reports from before that date were all stamped as routed as new when the column was added, so the funnel’s Duplicate row is a structural zero back there — and a structural zero looks exactly like real data. That’s why the page flags it.

A final note under everything: records past your retention window were deleted, which is why Reports never claims to show all time.